LINQ/Projection - 表达式树可能不包含动态操作?

gen*_*eek 0 linq linq-to-sql

下面的代码给出以下错误:

"表达式树可能不包含动态操作"

var x = db.Data.Select(x => new { name = TitleHT[x.TitleId], x.TitleId }).GroupBy(x => x.name);
Run Code Online (Sandbox Code Playgroud)

TitleHT是Dictionary<int, string>我可以查找TitleId的字符串表示.因此,我试图在查询中为此字符串文字指定名称.TitleId的类型是int?不确定这是否重要.

Phi*_*ein 5

您使用"linq-to-sql"标记了您的问题,因此我假设db是L2S DataContext.在这种情况下,LINQ Provider会尝试将TitleHT [x.TitleId]转换为SQL语句,但无法将其转换为SQL语句.这样的事情应该有效:

var x = db.Data
    .Select(x => x.TitleId)
    .ToList() // Subsequent projection using LINQ-to-Objects
    .Select(x => new { name = TitleHT[x], TitleId = x })
    .GroupBy(x => x.name);
Run Code Online (Sandbox Code Playgroud)

  • 你可能不应该使用`ToList()`,而是考虑使用`AsEnumerable()`. (2认同)
  • @JeffMercado对于某些场景来说是真的.这取决于您是否要维护延迟执行. (2认同)