【问题标题】:Joining a list of classes加入班级列表
【发布时间】:2014-12-22 00:52:56
【问题描述】:

大家好,我有两个学生班级的名单

List<Student> group1= new List<Trade>();
List<Student> group2= new List<Trade>();
public class Student
        {
            public string First_Name{ get; set; }
            public string Surname{ get; set; }
            public string Age{ get; set; }
        }

我想做一个加入,让我能够看到那些只在 1 个组中的人。
理想的输出是一个数据表,其中第 1 列显示仅在 group1 中的那些,而 column2 代表仅在 group2 中的那些 任何帮助将非常感激。我正在努力解决加入问题

【问题讨论】:

  • 您不能将TradeList 分配给StudentList
  • 您可能不需要在这里加入,这可能是您无法理解如何进行加入的原因。我敢打赌,Rahul 的答案就是您所需要的,使这个问题与 stackoverflow.com/q/18099054/397817 重复。另外:在一所大学校里,有两个名字、姓氏和年龄相同的学生并不罕见。您应该考虑为每个学生分配一个唯一的 ID。
  • 是的,我已经使用唯一的字符串 ID 应用了 Rahuls 答案,效果很好。谢谢

标签: linq class join


【解决方案1】:

使用Except:-

var onlyInGroup1 = group1.Except(group2);
var onlyInGroup2 = group2.Except(group1);

请注意,由于Student是复杂类型,需要实现IEqualityComparer&lt;Student&gt;

另外,我错过了@Hamlet 指出的您的列表初始化,它应该是这样的:-

List<Student> group1= new List<Student>();
List<Student> group2= new List<Student>();

【讨论】:

  • 谢谢拉胡尔 - 也许我没有正确解释。我想完全加入这两个列表并获得差异
  • @Jon - 为什么在这里需要Join?您能展示您期望的任何示例输入\输出吗?
  • 非常感谢 IEqualityComparer。当我构建信息字符串而不是类时,Except 效果很好。
  • @You 如果是字符串,会使用默认的比较器,对于Student等复杂类型需要自己实现IEqualityComparer
  • @Jon - 不客气!您可以接受它作为感谢的答案:)
【解决方案2】:

您可以遍历 group1 并查看 group2 是否包含与 group1 的匹配项

foreach (Student student in group1)
 {
  if (group2.Contains(student.First_Name))
   {
    //logic goes here
   }
 }

【讨论】:

  • 非常感谢您的回答。一个循环将是我的计划 B。希望存在一种可以处理数据的方法。
  • 可能是……我只是不知道它是什么!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2017-06-20
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多