2009-08-26 8 views
3

Dans mon dernier projet, j'ai décidé d'utiliser Entity Framework et tout allait bien jusqu'à ce que j'essaie d'obtenir des données avec "où", j'ai eu une erreur. Après une minuscule recherche, j'ai trouvé this post et that post.Paramètres de valeur de collection avec Entity Framework?

C'est ce que je suis en train de faire

var all = fooelements 
       .Where(l=>controlsToGet 
          .Contains(l.Control.Name)); 

Y at-il de le manipuler avec des expressions lambda ou LINQ avec Entity Framework?

Merci

+0

Quelle est l'erreur? – Lazarus

+0

"Impossible de créer une valeur constante de type 'System.Collections.Generic.IEnumerable'1' Seuls les types primitifs (par exemple Int32, String et Guid) sont pris en charge dans ce contexte." –

Répondre

1

Je ne sais pas d'un moyen de générer une WHERE IN clause avec EF, mais vous pouvez utiliser des arbres d'expression pour construire une clause WHERE qui testera pour chacun de vos valeurs:

Expression<Func<FooEntity, bool>> seed = l => false; 
    var predicate = controlsToGet.Aggregate(seed, 
     (e, c) => Expression.Lambda<Func<DataEventAttribute, bool>>(
      Expression.OrElse(
       Expression.Equal(
        Expression.Property(
         Expression.Property(
          e.Parameters[0], 
          "Control"), 
         "Name"), 
        Expression.Constant(c)), 
       e.Body), 
      e.Parameters)); 

    var all = fooelements.Where(predicate); 

Si vous imprimez predicate, vous devriez voir une expression comme ceci:

l => ((l.Control.Name = ctrl5) || l.Control.Name = ctrl4 || ... || False) 
+0

Merci beaucoup –