【问题标题】:Select two columns with Linq用 Linq 选择两列
【发布时间】:2019-11-20 07:34:25
【问题描述】:

我有这个 Linq 语句:

Cars[] carsNames = cn.Where( x => x.Paste == true).Select(x => {x.Name, x.Color}).ToArray();

但是"Select(x => {x.Name, x.Color})" 出现错误:

; expected
} expected

【问题讨论】:

标签: c# arrays linq multiple-columns


【解决方案1】:

我可能错了,但我认为您可能只需要一个 new 运算符:

Cars[] carsNames = cn
                    .Where( x => x.Paste)
                    .Select(x => new Cars{x.Name, x.Color})
                    .ToArray();

可能还有其他问题,例如Cars 的类型定义与您尝试作为它的实例传递的内容(即代码{x.Name, x.Color})之间的不匹配,但如果没有就很难判断查看所有相关代码。

PS:您应该能够从您的Where(...) 中删除== true

【讨论】:

  • 我尝试使用'new',但现在是:它没有实现'System.Collections.IEnumerable'
  • 您确定您使用的是new Cars,并且Cars 的类型在Select() 和行首(如Cars[] = ...)中都是正确的吗?我注意到无论如何我的示例中都有一个错误(我有 Car 而不是 Cars - 也许您应该考虑一下最合适的命名约定是什么?)
【解决方案2】:

您的语句中缺少 new 关键字。

Cars[] carsNames = cn.Where( x => x.Paste == true).Select(x => new Car{x.Name, x.Color}).ToArray();

【讨论】:

  • 当把新的我得到这个:它没有实现'System.Collections.IEnumerable'
【解决方案3】:

您需要使用new Cars() 使其工作;

Cars[] carsNames = cn.Where( x => x.Paste == true).Select(x => new Cars() {x.Name, x.Color}).ToArray();

【讨论】:

    【解决方案4】:

    您的最终结果是Cars 的数组(顺便说一句,您确定一辆车是 Cars 类的对象吗?)

    这意味着任何 Selected 项目都是 Cars 类的一个对象。

    选择器参数采用x => ... 的形式,其中x 是输入序列的一个元素,=> 之后的部分应该是输出序列的一个新对象。

    所以在=> 之后你应该创建一个新的 Cars 对象:

    .Select(x => new Cars()
    {
        Name = x.Name,
        Color = x.Color,
        ...
    })
    .ToArray()
    

    最后一句话:如果属性 Paste 是一个布尔值,如果你将它与 true 进行比较,它看起来有点傻,只需使用:

    .Where(x => x.Paste)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2023-03-12
      • 2012-08-07
      • 2021-12-11
      相关资源
      最近更新 更多