gpt4 book ai didi

c# - Linq 查询,其中将 DataTable 的第一列与第二列进行比较以查找重复项

转载 作者:行者123 更新时间:2023-12-01 23:48:27 25 4
gpt4 key购买 nike

我合并了在两列中都包含重复项的 DataTable。

数据表结构:“工号用户名”

1234 John
1235 Mike
1235 Mike
1236 Donald
1236 Jack

我要 catch

1236 Donald
1236 Jack

最好以格式输出

1236 Donald Jack

一段时间以来,我一直在尝试为此目的创建 Linq 查询(相当长的时间),但我想不出正确的方法。

这是我目前所拥有的。这行得通,我刚刚用 dataRow.Field<string>("WORKNUMBER") 测试了列名是否正确:

        public static DataTable ProjectsInLiinos = new DataTable();

...

MainProcess.MergedTable();

foreach (DataRow dataRow in MainProcess.ProjectsInLiinos.Rows)
{
Console.WriteLine(dataRow.Field<string>("WORKNUMBER") + dataRow.Field<string>("USERNAME"));
}

这是 Linq 查询:

var queryCustomers = from data in MainProcess.ProjectsInLiinos.AsEnumerable()
where data.Field<string>("WORKNUMBER").Count() > 1 && data.Field<string>("USERNAME").Count() < 1
select data;

它不产生任何东西。我不知道如何在第一列重复项与第二列重复项进行比较时发表声明?

否则我可以分组 dataRow.Field<string>("WORKNUMBER") + dataRow.Field<string>("USERNAME")然后检查重复列表,但它会产生:

1235Mike
1235Mike

反过来

1234John
1236Donald
1236Jack

最佳答案

尝试以下操作:

            DataTable dt = new DataTable();
dt.Columns.Add("Worknumber",typeof(int));
dt.Columns.Add("Username",typeof(string));

dt.Rows.Add(new object[] {1234, "John"});
dt.Rows.Add(new object[] {1235, "Mike"});
dt.Rows.Add(new object[] {1235, "Mike"});
dt.Rows.Add(new object[] {1236, "Donald"});
dt.Rows.Add(new object[] {1236, "Jack"});

var distinct = dt.AsEnumerable()
.GroupBy(x => x.Field<int>("Worknumber"))
.Select(x => new { workNumber = x.Key, user = x.Select(y => y.Field<string>("Username")).Distinct().ToList() })
.Where(x => x.user.Count > 1)
.Select(x => new { workNumber = x.workNumber, user = string.Join(" ", x.user) })
.ToList();

关于c# - Linq 查询,其中将 DataTable 的第一列与第二列进行比较以查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63811878/

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