我正在寻找一个与我的数据表一起使用的LINQ,并根据windows form datagrid视图中的某些列显示所有重复的行。
LINQ应该给出类似于下面的普通旧的结果给SQL。
SELECT *
FROM Table1 t
JOIN ( SELECT Taskid, Studentid, DateChangeid
FROM Table1
GROUP BY Taskid, studentid, datechangeid
HAVING COUNT(*) > 1) temp
ON t.taskid = temp.taskid AND t.studentid= temp.studentid AND t.datechangeid= temp.datechangeid
答案 0 :(得分:1)
这应该做你想要的:
var result =
t.GroupBy(g => new {TaskId = Taskid, StudentId = studentid, DatechangeId = datechangeid})
.Where(g => g.Count > 1)
.ToList();
现在您加入了Table1
Table1
上不需要的内容,只需在Table1
上进行过滤。
现在结果将是List<IGrouping<'a,Table1>>
类型,但由于匿名键选择器,您还可以在类中定义TaskId
,StudentId
和DateChangeID
来摆脱那。例如:
public class Table1GroupKey
{
public int TaskId {get; set;}
public int StudentId {get; set;}
public int DateChangeId {get; set;}
}
然后你可以使用:
GroupBy(g => new Table1GroupKey { ... })
您的结果将是List<IGrouping<Table1GroupKey,Table1>>
。
答案 1 :(得分:0)
我通过编写下面给出的两个linq来管理它。
var RepeatedValues = from d in DataTableitems.AsEnumerable()
group d by d.Field<string>("MobileNo") into itemGroup
where itemGroup.Count() > 1
select new { name = itemGroup.Key };
var RepeatedInRows= from d in DataTableitems.AsEnumerable()
join c in RepeatedValues.AsEnumerable() on d.Field<string>
("MobileNo") equals c.name
select d;