在LINQ中使用函数

Chr*_*ris 0 .net c# 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.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

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;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

问题是SQL转换无法将您的方法转换为SQL.您应该使用AsEnumerable()从进程外提供程序"切换"到LINQ到对象.例如:

var query = context.WashroomStatus
                   .Where(c => c.WashroomId == GroupItem.WashroomID)
                   .AsEnumerable()
                   .Select(c => GetWashroomStatusForItem(c));
Run Code Online (Sandbox Code Playgroud)

请注意,如果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));
Run Code Online (Sandbox Code Playgroud)