Jac*_*eja 8 linq-to-entities entity-framework linq-to-sql
我遇到过这个问题:
基本上我有一些复杂的LINQ查询,所以想把它们分解成子查询,这些子查询被实现为返回IQueryables的方法.我希望这些IQueryable可以在LINQ语句中组合在一起(因为我很确定你可以在LINQ to SQL中做到).
问题是如果你试试这个(例如):
LINQ to Entities无法识别方法'System.Linq.IQueryable`1 [Thread] GetThreadsByMostReccentlyPosted(Int32)'方法,并且此方法无法转换为商店表达式.
对我来说,如果你使用LINQ ORM,那么你需要能够编写LINQ查询.否则,必须复制和粘贴任何常见的查询逻辑.
鉴于这种限制,我如何使用LINQ to Entities保持DRY?
Cra*_*ntz 12
两种方式:
对于#1,请考虑:
public Expression<Func<Foo, bool>> WhereCreatorIsAdministrator()
{
return f => f.Creator.UserName.Equals("Administrator", StringComparison.OrdinalIgnoreCase);
}
public void DoStuff()
{
var exp = WhereCreatorIsAdministrator();
using (var c = new MyEntities())
{
var q = c.Foos.Where(exp); // supported in L2E
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
有关数字2的示例,请阅读以下文章:如何编写L2O和L2E查询.考虑那里给出的例子:
var partialFilter = from p in ctx.People
where p.Address.City == “Sammamish”
select p;
var possibleBuyers = from p in partiallyFilter.AsEnumerable()
where InMarketForAHouse(p);
select p;
Run Code Online (Sandbox Code Playgroud)
这可能效率较低,也可能没问题.这取决于你在做什么.投影通常很好,通常不适合限制.
更新刚看到Damien Guard 对选项#1的更好解释.
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |