【问题标题】:LINQ query on datatable, join multiple selects对数据表进行 LINQ 查询,加入多个选择
【发布时间】:2017-07-19 12:23:43
【问题描述】:

我在数据表上有以下 linq 查询:

string[] sourceNames = this.dt
                    .AsEnumerable()
                    .Select<System.Data.DataRow, String>(x => x.Field<String>("Name"))
                    .ToArray();

string[] sourceSurnames = this.dt
        .AsEnumerable()
        .Select<System.Data.DataRow, String>(x => x.Field<String>("Surname"))
        .ToArray();

string[] sourceSecondSurnames = this.dt
        .AsEnumerable()
        .Select<System.Data.DataRow, String>(x => x.Field<String>("Second Surname"))
        .ToArray();

string[] src = sourceNames.Union(sourceSurnames).Union(sourceSecondSurnames).ToArray();

Datatable 有一些字段,其中一些在上面:Names, Surname, Second Surname... 等等。

我在这里尝试做的是将所有三个 linq 查询合并到一个中。最终目标是得到一个字符串数组,即src。

我该怎么做?

【问题讨论】:

  • 那么上面的代码有什么问题?
  • 你当前的代码是做什么的?这与您想要它做什么有什么不同?

标签: c# linq datatable


【解决方案1】:

您可以使用SelectMany 在单个查询中轻松获得它:

string[] src = dt.AsEnumerable()
   .SelectMany(row => new[]{ row.Field<String>("Name"),row.Field<String>("Surname"),row.Field<String>("Second Surname")} )
   .Distinct()
   .ToArray();

【讨论】:

    【解决方案2】:
                var everything = dt
                .AsEnumerable()
                .Select(x => x.Field<string>("Name"))
                .ToArray().Concat(dt.AsEnumerable()
                .Select(x => x.Field<string>("Surname"))
                .ToArray()).Concat(dt
                    .AsEnumerable()
                    .Select(x => x.Field<string>("Second Surname"))
                    .ToArray());
    

    使用 Concat 可以解决这个问题。

    【讨论】:

    • 这是一个问题还是一个答案?
    • 这是对用户提出问题以检查它是否为他解决问题的答案和问题。
    • 答案不应该包含问题,这就是 cmets 的用途。
    【解决方案3】:

    在查询语法中是

    var src = (from row in dt.AsEnumerable()              
               from n in new[]{ row.Field<String>("Name"),row.Field<String>("Surname"),row.Field<String>("SecondSurname")} 
               select  n).Distinct().ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      相关资源
      最近更新 更多