Linq在查询中使用TakeWhile

时间:2014-05-13 13:41:59

标签: c# linq console

您好我刚开始学习linq并且一直在尝试了解TakeWhile的用法

这里我尝试过这样的事情

 using (  var db = new OrchestrateDataEntities())
        {


            var y = db.Set<Rulebook_Mapping>();
            var xyz = y.TakeWhile(x => x.ID == 2).AsQueryable();
            foreach (var item in xyz)
            {
                Console.WriteLine(item.ID);


            }

        }
        Console.ReadKey();

然后出现错误

 LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[ConFW.Rulebook_Mapping] TakeWhile[Rulebook_Mapping](System.Linq.IQueryable`1[ConFW.Rulebook_Mapping], System.Linq.Expressions.Expression`1[System.Func`2[ConFW.Rulebook_Mapping,System.Boolean]])' method, and this method cannot be translated into a store expression.

2 个答案:

答案 0 :(得分:2)

http://blogs.msdn.com/b/wriju/archive/2009/01/02/linq-to-entity-skip-and-take-method-does-not-work.aspx检查LINQ to Entity中支持和不支持的方法。然后打开分页方法页面,你会看到不支持TakeWhile(在底部)。

答案 1 :(得分:2)

qxg is right,TakeWhile不是由EF实现的,但您可以在LINQ to Object中使用它。

旧代码:

var y = db.Set<Rulebook_Mapping>();

新代码:

var y = db.Set<Rulebook_Mapping>().ToList();

新代码应该修复错误,它将RuleBook_Mapping表中的所有记录带到本地内存,如果可能的话,添加ToList()之前的过滤器将有助于提高性能。