在Linq中选择Class(变量)而不是Select New Class {variable = x}

时间:2012-02-17 17:06:12

标签: c# linq

这个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 {}子句中写相同的东西。

3 个答案:

答案 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。