C#7.0 Value Tuple编译错误?

Tấn*_*ang 5 asp.net linq-to-entities expression-trees c#-7.0 valuetuple

当我尝试编译以下代码时:

var post = iPostService.GetAll().Select(x => (x.Title, x.Author));
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:“表达式树可能不包含元组文字。”

所以,我也试过这样:

var post = iPostService.GetAll().
                    Select(x => new ValueTuple<string, string>(x.Title, x.Author))
Run Code Online (Sandbox Code Playgroud)

结果是运行时错误:“无法解析方法Void .ctor(System.String,System.String),因为方法句柄System.ValueTuple`2 [T1,T2]的声明类型是通用的。将声明类型明确提供给GetMethodFromHandle。

我用谷歌搜索找到了解决这个问题的方法,但是没有什么真正的帮助。

任何帮助真的很感激。

谢谢

Tấn*_*ang 13

最后,我发现我的代码有什么问题:

  • 我正在使用延迟执行,因此在构造函数执行时不会从数据库加载数据。
  • 解决方案是在创建实例命令之前添加转换运算符。

希望它适用于您的代码。

  • 就我而言,为了处理延迟执行,我只是在 Select() 语句之前添加了 .AsEnumerable() (2认同)
  • 正如@jack 所说。在 Select() 投影之前添加 AsEnumerable() 使其内部的 lambda 成为委托函数而不是表达式树,这确实允许元组文字 (2认同)

au.*_*.tw 13

它对我有用,先创建一个元组并将其转换为 ValueTuple?

var post = iPostService.GetAll().
           Select(x => new Tuple<string, string>(x.Title, x.Author).ToValueTuple())
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案!这个问题阻止我模拟我的自动映射器方法 CreateMap (我在其中使用元组)。有关此问题(“表达式树可能不包含元组文字”)存在原因的更多信息:https://www.damirscorner.com/blog/posts/20181207-NoSupportForTuplesInExpressionTrees.html (2认同)