2010-12-01 3 views
1

J'essaie de sélectionner des éléments d'une table SQLCE, où un champ existe dans un tableau de chaînes. C'est facile en SQL avec:Entity Framework contient/In Clause avec SQLCE

SELECT * 
FROM TableX 
WHERE SomeField In 
([comma delimited array values]); 

J'ai du mal à transposer cela à LINQ. Ce qui suit fonctionnerait logiquement, mais il reçoit cette erreur: LINQ to Entities ne reconnaît pas la méthode 'Boolean Contient [String] (System.Collections.Generic.IEnumerable1 [System.String], System.String)' méthode et cette méthode ne peut pas être traduite en une expression de magasin.

var result = from c in DB.TableX 
      where someStringArray.Contains(c.SomeField) 
      select c; 

S'il vous plaît laissez-moi savoir si quelqu'un a des idées ou des conseils.

Merci!

Mise à jour:

Ce qui suit, reccomended ci-dessous, jette un NotSupportedException, avec un message d'erreur, où la classe X est la classe appelant l'énumération: Impossible de créer une valeur constante de type « NamespaceX.ClassX » . Seuls les types primitifs ('tels que Int32, String et Guid') sont pris en charge dans ce contexte.

var result = from c in DB.TableX 
      where someStringArray.Any(s => s == c.SomeField) 
      select c; 
+0

La réponse ci-dessous ne fonctionne pas? Cela a fait pour moi. –

+1

Cochez cet article: http://blogs.msdn.com/b/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx – ITmeze

Répondre

1

essayer

var result = from c in DB.TableX 
      where someStringArray.Any(s => s == c.SomeField) 
      select c; 

S'il vous plaît marquer comme réponse si cela résout votre problème.

+0

n'a pas résolu ... voir la mise à jour ci-dessus – bunglestink

+0

Utiliser .Contains() au lieu de .Any() – JCallico