实体框架的集合值参数?

问题描述:

在我上一个项目中,我决定使用实体框架,这一切都进展顺利,直到我试图获得与数据“在”,我得到了一个错误。实体框架的集合值参数?

经过一个小小的搜索后,我想出了this postthat post

这就是我要做的

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

是否有任何与lambda表达式或LINQ实体框架处理呢?

谢谢

+0

什么是错误? – Lazarus 2009-08-26 15:53:29

+0

“无法创建类型为'System.Collections.Generic.IEnumerable'1的常量值。在此上下文中仅支持基本类型(例如Int32,String和Guid)。” – 2009-08-26 15:59:15

大厦R I有一个提示,可以很容易地在这里做到这一点:

Tip 8 - How to write 'WHERE IN' style queries using LINQ to Entities

希望这有助于

亚历克斯·詹姆斯

项目经理 - 实体框架团队

Entity Framework Tips

+0

非常感谢,这就是我在寻找并感谢你的框架提示链接 – 2009-08-26 21:43:36

我不知道的方式来产生与EF一WHERE IN条款,但您​​可以使用表达式树来构建一个WHERE条款,这将考验每一个你的价值观:

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); 

如果打印出来predicate,你应该会看到像这样的表达:在以前的answe

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

非常感谢你 – 2009-08-26 21:42:59