【问题标题】:LINQ/Projection - An expression tree may not contain a dynamic operation?LINQ/Projection - 表达式树可能不包含动态操作?
【发布时间】:2011-12-10 22:09:51
【问题描述】:

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

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

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

TitleHT 是Dictionary<int, string>,因此我可以查找 TitleId 的字符串表示形式。因此,我试图在查询中将名称分配给这个字符串文字。 TitleId 是 int 类型吗?不确定这是否重要。

【问题讨论】:

  • 那么...其中的任何部分都涉及动态吗?例如,什么是 db.Data?

标签: linq linq-to-sql


【解决方案1】:

您用“linq-to-sql”标记了您的问题,所以我假设 db 是 L2S DataContext。在这种情况下,LINQ 提供程序会尝试将 TitleHT[x.TitleId] 转换为 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);

【讨论】:

  • 你可能不应该使用ToList(),而是考虑使用AsEnumerable()
  • @JeffMercado 在某些情况下确实如此。这真的取决于你是否想保持延迟执行。
  • @PhilKlein:感谢您的回复。 x.TitleId 没有从第二个 Select 中得到解决。每个智能感知显示的唯一选项是“HasValue”、“Value”、Equals 等。
  • 很抱歉。我更新了答案。希望这能解决问题。
  • @PhilKlein:Doh,是的,有道理。实际上,我不得不将 TitleHT[x] 更新为 TitleHT[x.Value] 并且工作起来就像一个魅力。 :) 谢谢菲尔!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2013-07-27
  • 2011-10-30
  • 2012-05-05
  • 2012-09-07
  • 2011-05-08
相关资源
最近更新 更多