Mat*_*att 4 linq linq-to-entities entity-framework anonymous-types .net-3.5
假设我有一个方法:
bool myMethod(int a)
{
//return a bool
}
Run Code Online (Sandbox Code Playgroud)
所以我要说以下内容
// assume a has prop1 and prop2 both ints
var mySelection = from a in myContainer
where a=somecondition
select new {
a.prop1,
myMethod(a.prop2)
};
Run Code Online (Sandbox Code Playgroud)
真的没有办法在匿名类型声明中运行myMethod吗?有某种伎俩吗?
我可以在那里放一个匿名方法来返回myMethod(a.prop2)的等价物吗?
Ale*_*mes 11
好吧,让我们分成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)
};
Run Code Online (Sandbox Code Playgroud)
它将在LINQ to Objects中工作
但是实体框架将无法转换方法调用(除非它是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)};
Run Code Online (Sandbox Code Playgroud)
这会从数据库中获取所需内容,然后使用AsEnumerable()调用将对myMethod的调用转换为LINQ to Objects而不是LINQ to Entities处理的内容
希望这可以帮助
亚历克斯