Linq在查询中使用TakeWhile
本文关键字:TakeWhile 查询 Linq | 更新日期: 2023-09-27 18:03:20
嗨,我刚开始学习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.
在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(在底部)。
qxg是正确的,TakeWhile不是由EF实现的,但您可以在LINQ to Object中使用它。
旧代码:var y = db.Set<Rulebook_Mapping>();
新代码:var y = db.Set<Rulebook_Mapping>().ToList();
新代码应该修复错误,它将RuleBook_Mapping表中的所有记录带到本地内存,如果可能的话,在ToList()之前添加where过滤器将有助于性能。