linq其中AND与多个OR'

时间:2014-10-27 19:20:40

标签: sql linq linq-to-sql

我有一个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;

任何帮助都将不胜感激。

1 个答案:

答案 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}对的所有三列都相同,则忽略该组。否则,该组将被报告为查询结果。