我有一个DataTable,我试图找到使用LINQ在一组列上不同的不同行。 DataTable具有以下列结构:name,department,shift,empType,onCall。我试图找出所有具有相同名称和部门的行,但shift,empType或onCall可能会有所不同。我尝试了以下LINQ,但它只是给了我重复的内容。
from DataRowView e in empDataTable
group e by new
{
Name = e.Row["name"],
Dept = e.Row["department"],
Shift = e.Row["shift"],
EmployeeType = e.Row["empType"],
OnCall = e.Row["onCall"]
}
into g
where (g.Count() > 1)
select g;
任何帮助都将不胜感激。
答案 0 :(得分:0)
您需要排除要允许与GROUP BY
键不同的列,否则LINQ会为每个组合创建一个单独的组,因此其他行的计数将保持1
比完全重复(即所有五列匹配的行):
from DataRowView e in empDataTable
group e by new
{
Name = e.Row["name"],
Dept = e.Row["department"]
}
into g
where (g.GroupBy(g => new {
Shift = e.Row["shift"],
EmployeeType = e.Row["empType"],
OnCall = e.Row["onCall"]
}).Count() > 1)
select g;
其余三列的内部GROUP BY
组。如果{name, department}
对的所有三列都相同,则忽略该组。否则,该组将被报告为查询结果。