gpt4 book ai didi

c# - 奇怪的 Linq to Entities 行为与 AsExpandable()

转载 作者:行者123 更新时间:2023-11-30 15:31:43 25 4
gpt4 key购买 nike

考虑以下 Person 实体:

public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

使用以下表达式(使用PredicateBuilder 构造)作为条件:

var byName = PredicateBuilder.True<Person>().And(x => x.FirstName == "Chaim");

当使用以下语法调用时,生成的 SQL 没有问题(包括 WHERE 语句):

ctx.Set<Person>().AsExpandable().Where(x => byName.Invoke(x));

但是,当使用这种略有不同的语法调用时,不涉及 SQL WHERE,而是通过 Enumerable.Where 完成过滤:

ctx.Set<Person>().AsExpandable().Where(byName.Invoke);

有什么想法吗?

最佳答案

没有从方法组到 Expression 的隐式转换(对应的委托(delegate)类型)。 从方法组到匹配签名的委托(delegate)的隐式转换。因此只有 IEnumerable过载比赛。

当然,这并不是说您需要使用 lambda。只写:

ctx.Set<Person>().AsExpandable().Where(ByName);

由于您传递的是一个表达式(ByName 毕竟已经是一个 Expression<Person, bool>,这正是 Queryable.Where<Person> 所需要的),这将作为一个查询进行评估,而不是在对象的 linq 中。

关于c# - 奇怪的 Linq to Entities 行为与 AsExpandable(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252016/

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