首页 > 解决方案 > 对基于 LINQ 的列表使用匿名类型而不是 var

问题描述

我有返回匿名类型的 LINQ 请求,例如:

var result = context.Table1.Select(
    x => new
    {
        col1 = x.col1,
        col2 = x.col2
    }).ToList();

这很好,直到我想将结果交给另一个函数。

比我需要准确指定的,列表的类型是什么。我不能再使用var了。

但是如果我使用

List< (string col1, string col2)> result ...

我收到 “无法隐式转换类型...”错误。

是的,我可以为每个实体创建一个新类。但这是处理它的唯一方法吗?

标签: c#listlinqvar

解决方案


如果你想使用元组类型(这就是你(string col1, string col2)的)而不是匿名类型(这就是你new { col1=x.col1...}的),你需要另一种语法:

List<(string col1, string col2)> list = context.Table1
    .Select( // linq to entities
    x => new
    {
        col1 = x.col1,
        col2 = x.col2
    })
    .ToArray() // go on with linq to objects for use of tuple types
    .Select(x => (col1: x.col1, col2: x.col2))
    .ToList();

表达式树不支持 ValueTuples,因此您可能需要在查询中使用匿名类型和元组类型的组合

请参阅元组类型在匿名和元组类型之间进行选择


推荐阅读