gpt4 book ai didi

linq-to-sql - 鉴于LINQ to Entities不支持 "Custom methods",您如何保持DRY?

转载 作者:行者123 更新时间:2023-12-04 06:28:58 25 4
gpt4 key购买 nike

我遇到了这个问题:

Custom Methods & Extension Methods cannot be translated into a store expression

基本上,我有一些复杂的LINQ查询,因此想将它们分解为子查询,这些子查询被实现为返回IQueryables的方法。我的希望是,然后可以在LINQ语句中将这些IQueryables组合在一起(因为我很确定您可以在LINQ to SQL中做到)。

问题是,如果尝试此操作,您将得到(例如):

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[Thread] GetThreadsByMostReccentlyPosted(Int32)' method, and this method cannot be translated into a store expression.



在我看来,如果您使用LINQ ORM,那么您必须能够组成LINQ查询,这似乎非常基础。否则,必须复制和粘贴任何常见的查询逻辑。

鉴于此限制,我应该如何使用LINQ to Entry保持干燥?

最佳答案

两种方式:

  • 可以使用返回表达式的方法
  • 分隔可查询和可枚举的位

  • 对于#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

    关于linq-to-sql - 鉴于LINQ to Entities不支持 "Custom methods",您如何保持DRY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042668/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com