C# 在LINQ中使用函数
我正在使用LINQ创建一个列表。但是我想在最后使用一个函数来生成对象iself,这是LINQ抱怨的C# 在LINQ中使用函数,c#,.net,linq,C#,.net,Linq,我正在使用LINQ创建一个列表。但是我想在最后使用一个函数来生成对象iself,这是LINQ抱怨的 LINQ to Entities does not recognize the method 'WashroomStatusItem GetWashroomStatusForItem(WashroomStatus)' method, and this method cannot be translated into a store expression. 我做错了什么 var query = (
LINQ to Entities does not recognize the method 'WashroomStatusItem GetWashroomStatusForItem(WashroomStatus)' method, and this method cannot be translated into a store expression.
我做错了什么
var query = (from c in context.WashroomStatus
where c.WashroomId == GroupItem.WashroomID
select GetWashroomStatusForItem(c));
private WashroomStatusItem GetWashroomStatusForItem(WashroomStatus item)
{
WashroomStatusItem temp = new WashroomMonitorWCF.WashroomStatusItem();
//do stuff with it
return temp;
}
问题是SQL转换无法将您的方法转换为SQL。您应该使用AsEnumerable从进程外提供程序切换到LINQ to对象。例如:
var query = context.WashroomStatus
.Where(c => c.WashroomId == GroupItem.WashroomID)
.AsEnumerable()
.Select(c => GetWashroomStatusForItem(c));
请注意,如果GetWashroomStatusForItem仅使用某些属性,您可能希望首先分别投影到这些属性,以减少从服务器获取的信息量:
var query = context.WashroomStatus
.Where(c => c.WashroomId == GroupItem.WashroomID)
.Select(c => new { c.Location, c.Date };
.AsEnumerable()
.Select(p => GetWashroomStatusForItem(p.Location, p.Date));
Jon Skeet的回答是正确的,但我要补充的是,根据GetWashroomStatusForItem的性质,它可能应该分解为LINQ语句并添加到查询本身中,或者应该在查询返回后执行 所以,假设GetWashroomStatusForItem看起来是这样的:注意,这是非常简单的
public static WashroomStatus GetWashroomStatusForItem(Item c)
{
return c.WashroomStatus;
}
它应该像这样添加到LINQ查询中:
var query = (from c in context.WashroomStatus
where c.WashroomId == GroupItem.WashroomID
select c.WashroomStatus);
但是,如果它严重依赖于数据库中没有的内容,我会在获得洗手间状态之前结束Linq语句,然后在结果上调用GetWashroomStatusForItem。因为Linq使用延迟计算,所以不会有性能差异,而且您通常希望将db操作与编程操作分开 你收到的错误是什么LINQ抱怨的东西太模糊了。请以后再详细说明。