gpt4 book ai didi

linq - 在 EF 中使用 LINQ 选择匿名类型时,是否无法在选择对象时在对象上运行方法?

转载 作者:行者123 更新时间:2023-12-04 22:26:02 25 4
gpt4 key购买 nike

假设我有一个方法:

bool myMethod(int a)
{
//return a bool
}

所以让我们说我以下
// assume a has prop1 and prop2 both ints
var mySelection = from a in myContainer
where a=somecondition
select new {
a.prop1,
myMethod(a.prop2)
};

真的没有办法在匿名类型声明中运行 myMethod 吗?有什么绝招吗?

我可以在那里放一个匿名方法来返回相当于 myMethod(a.prop2) 的方法吗?

最佳答案

好吧,让我们将其分为 LINQ to Objects 和 LINQ to Entities

在 LINQ to Object 中,上述失败是因为编译器不知道属性名称是什么,如果将其更改为:

var mySelection = from a in myContainer
where a=somecondition
select new {
a.prop1,
prop2 = myMethod(a.prop2)
};

它将在 LINQ to Objects 中工作

但是, Entity Framework 将无法转换方法调用(除非它是 EF 已知的函数,例如模型定义函数、EdmMethods 或 SqlMethods),因此您必须像这样重写该查询:
var mySelection = from a in myContainer
where a=somecondition
select new {
a.prop1,
a.prop2
};

var myResults = from a in mySelection.AsEnumerable()
select new {a.prop1, prop2 = myMethod(a.prop2)};

这会从数据库中提取您需要的内容,然后使用 AsEnumerable() 调用将对 myMethod 的调用转换为由 LINQ to Objects 而不是 LINQ to Entities 处理的内容

希望这可以帮助

亚历克斯

关于linq - 在 EF 中使用 LINQ 选择匿名类型时,是否无法在选择对象时在对象上运行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705341/

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