这个linq工作正常:
return (from page in db.WebPages
where pageids.Contains(page.page_id)
select new Result
{
a = page.a,
b = page.b
});
但是我想做一些不起作用的事情:
return (from page in db.WebPages select GetResult(page));
public Result GetResult(WebPage page)
{
return new Result
{
a = page.a,
b = page.b
};
}
这给出了Linq不支持翻译的错误。
我想这样做的原因是因为结果更复杂并且代码已经完成了很多次,所以为了避免在每个linq select new {}子句中写相同的东西。
答案 0 :(得分:1)
您正尝试在数据库范围内执行方法GetResult()
。 Linq to Sql / Entities被转换为SQL查询,您的方法将无效。您必须使用方法A.或者,您可以使用AsEnumerable()
强制执行查询的后续部分作为Linq to Objects:
return (from page in db.WebPages
where pageids.Contains(page.page_id)).AsEnumerable()
.Select(GetResult);
答案 1 :(得分:1)
试试这个?
return db.WebPages.Where( x=> x.Contains(page.page_id).Select(x => GetResult(x));
答案 2 :(得分:1)
尝试以下内容:
private static IQueryable<Result> toResults(IQueryable<WebPage> query)
{
return query.Select(item => new Result
{
//...
}
}
用法:
return toResults(db.WebPages);
像我这样组织它们对我和其他查询提供程序一起工作,虽然我没有亲自使用Linq-to-SQL。