我合并了在两列中都包含重复项的 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/