c# - 使用 LINQ 从不同的组中选择重复值

标签 c# linq datatable

我有一个如下所示的数据表,我想从其他类中选择重复的名称

Name    Class
Akbar   1B
Akbar   1B
Amar    1A
Amar    1C
Antoney 1A
Bindhu  1B
Bindhu  1D
John    1C
Raj     1B
Bindhu  2A

结果应该如下所示

Amar    1A
Amar    1C
Bindhu  1D
Bindhu  1B
Bindhu  2A

提前感谢任何指导

代码

var dtStudents = new DataTable();
dtStudents.Columns.Add("StudentID", typeof(int));
dtStudents.Columns.Add("StudentName", typeof(string));
dtStudents.Columns.Add("Class", typeof(string));
dtStudents.Columns.Add("ContactNo", typeof(string));

DataRow drStudent = dtStudents.NewRow();

drStudent["StudentID"] = 1;
drStudent["StudentName"] = "Akbar";
drStudent["Class"] = "1B";
drStudent["ContactNo"] = "989878679";
dtStudents.Rows.Add(drStudent);

dtStudents.Rows.Add(new object[] { 2, "Akabr", "1B", "989777" });
dtStudents.Rows.Add(new object[] { 3, "Amar", "1A", "3453" });
dtStudents.Rows.Add(new object[] { 4, "Amar", "1C", "543534" });
dtStudents.Rows.Add(new object[] { 5, "Antoney", "1A", "54345" });
dtStudents.Rows.Add(new object[] { 6, "Bindhu", "1B", "53453" });
dtStudents.Rows.Add(new object[] { 7, "Bindhu", "1D", "3453453" });
dtStudents.Rows.Add(new object[] { 8, "John", "1C", "3245345" });
dtStudents.Rows.Add(new object[] { 9, "Bindhu", "2A", "5345345" });

var results =
    from d in dtStudents.AsEnumerable()
    select d;

dataGridView1.DataSource = results.CopyToDataTable<DataRow>();

最佳答案

var results = dtStudents.AsEnumerable()
    .GroupBy(
        x => x.Field<string>("StudentName"), // group by student name
        (k, xs) => xs.GroupBy(
            x1 => x1.Field<string>("Class"), // group by class
            (k1, xs1) => xs1.First())) // if there are duplicates, take only the first
    .Where(x => x.Count() >= 2) // remove if student only has one class
    .SelectMany(x => x); // flatten back to a single collection

dataGridView1.DataSource = results.CopyToDataTable<DataRow>();

关于c# - 使用 LINQ 从不同的组中选择重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35810091/

相关文章:

c# - 按作为实体导航属性的字段排序 - Linq to Entity

c# - 在finally block 中抛出异常是否是一种好的做法?

c# - 获取客户端证书

c#: 元素 'Id' 不匹配任何字段或属性 MongoDB

c# - 选择 LINQ 中不存在子行的行

c# - C# 根据列将DataTable拆分为多个DataTable

c# - 如何在C#中通过Datatable的单元格值获取行索引

c# - 如何指定打开excel文件的字符串路径?

c# - EF代码优先中使用继承的困境

c# - 如何强制 LINQ to SQL 对可为空的外键执行 INNER JOIN?