linq-to-sql – 鉴于LINQ to Entities不支持“自定义方法”,你如何保持DRY?
|
我遇到过这个问题: Custom Methods & Extension Methods cannot be translated into a store expression 基本上我有一些复杂的LINQ查询,所以想要将它们分解为子查询,这些子查询被实现为返回IQueryables的方法.我希望这些IQueryable可以在LINQ语句中组合在一起(因为我很确定你可以在LINQ to SQL中做到). 问题是如果你试试这个(例如):
对我来说,如果你使用LINQ ORM,那么你需要能够编写LINQ查询.否则,任何常见的查询逻辑都必须是copy&粘贴. 鉴于这种限制,我怎么能用LINQ to Entities保持DRY? 解决方法两种方式:>可以使用返回表达式的方法 对于#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
}
}
有关数字2的示例,请阅读本文:How to compose L2O and L2E queries.请考虑给出的示例: 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;
这可能效率较低,或者可能没问题.这取决于你在做什么.投影通常很好,通常不适合限制. 更新刚从Damien Guard看到an even better explanation of option #1. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
