【问题标题】:Get Distinct String List From DataTable从 DataTable 中获取不同的字符串列表
【发布时间】:2017-01-25 04:08:33
【问题描述】:

为了减少代码量,是否可以将其组合在一行中 - 我将 DataTable 列转换为字符串列表,但我只想要该列表中的不同项目(有多个列,所以有时列将有多个值,其中一个不会):

List<string> column1List = returnDataTable.AsEnumerable().Select(x => x["Column1"].ToString()).ToList();
var distinctColumn1 = (from distinct1 in column1List select distinct1).Distinct();

上面的工作,但是一个额外的行。由于 distinct 是列表中的一个选项,因此我确实尝试了:

List<string> column1List = (returnDataTable.AsEnumerable().Select(x => x["Column1"].ToString()).ToList()).Distinct();

但是,该错误,因此似乎无法在从 DataTable (?) 转换的列表上调用 distinct。

只是好奇是否可以将 DataTable 转换为字符串列表并仅在一行中获取不同的值。可能是不可能的。

【问题讨论】:

  • 只需移动Distinct() 之前 ToList()。仅供参考,DistinctIEnumerable&lt;T&gt; 的扩展方法,而不是List&lt;T&gt; 的方法。

标签: c#


【解决方案1】:

Distinct 在您的情况下返回 IEnumerable&lt;TSource&gt;,它返回 IEnumerable&lt;String&gt; 并且您正在尝试在输出中获取 List&lt;String&gt;

您需要更改代码

List<string> column1List = (returnDataTable.AsEnumerable().Select(x => x["Column1"].ToString()).ToList()).Distinct();


List<string> column1List = (returnDataTable.AsEnumerable().Select(x => x["Column1"].ToString()).Distinct().ToList();

【讨论】:

    【解决方案2】:

    使用System.Linq 你可以使用类似这样的东西

    my_enumerable.GroupBy(x => x.Column1).Select(x => x.First).ToList()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 2020-07-25
      • 2012-01-12
      • 2018-07-06
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多