gpt4 book ai didi

c# - 如何使用 LINQ 从 DataTable 中获取唯一列

转载 作者:行者123 更新时间:2023-11-30 22:08:27 25 4
gpt4 key购买 nike

我在 C# 中有一个 DataTable,列定义如下:

DataTable dt = new DataTable();
dt.Columns.Add("OrgName", typeof(string));
dt.Columns.Add("OrgExId", typeof(string));
dt.Columns.Add("UserName", typeof(string));
dt.Columns.Add("UserExId", typeof(string));
dt.Columns.Add("UserEmail", typeof(string));

“UserName”、“UserExId”和“UserEmail”都是唯一的,它们按“OrgName”和“OrgExId”分组

我想编写一个 LINQ 查询来制作一个包含唯一“OrgExId”和“OrgName”的新 DataTable

据我所知:

var results = from row in dt.AsEnumerable()
group row by row["OrgExId"] into orgs
select orgs;

特别是在这个查询中,我不明白我应该如何从原始 DataTable 中选择行。 Visual Studio 说 orgs 是“IGrouping”类型,但我以前从未真正见过这种类型,也不确定如何操作它。

这是键值对吗?

很抱歉。我没有说明我的最终结果。

我想得到一个包含两列的 DataTable,分别是“OrgExId”和“OrgName”。 (“OrgExId”和“OrgName”是一对一的关系)

最佳答案

你真正需要的只是一个 Distinct 从句

    var output = dt.AsEnumerable()
.Select(x => new {OrgExId = x["OrgExId"], OrgName = x["OrgName"]})
.Distinct();

然后您可以迭代它并构建一个 DataTable 或您需要的任何内容。

更新:您要求输出为数据表,但上述解决方案不太适合我,因为它需要额外的工作。为了提高效率,您可以执行自定义相等比较器。

你的 linq 看起来像这样......

    // This returns a DataTable
var output = dt.AsEnumerable()
.Distinct(new OrgExIdEqualityComparer())
.CopyToDataTable();

你的比较器看起来像这样......

public class OrgExIdEqualityComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
return x["OrgExId"].Equals(y["OrgExId"]);
}

public int GetHashCode(DataRow obj)
{
return obj["OrgExId"].GetHashCode();
}
}

关于c# - 如何使用 LINQ 从 DataTable 中获取唯一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22258650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com