将列表计数与两个对象进行比较C#

时间:2015-07-17 13:39:33

标签: c# list

我一直坐在一个小问题上,希望得到一些帮助。

我有两个模块列表,如下所示。

我基本上想要实现的是跟踪已完成的主题。

m1代表完整的模块集及其技能和主题,m2代表主题模块,技能和主题,访问和不完整。

List <ModuleA> m1;
List <ModuleB> m2;
public class ModuleA
{
    public bool completed { get; set; }
    public string ModuleCode { get; set; }
    public List<Skill> lstKeySkills { get; set; }
}
public class ModuleB
{

    public string ModuleCode { get; set; }
    public List<Skill> lstKeySkills { get; set; }
}
public class Skill
{
    public string KeySkillName { get; set; }
    public List<Topic> LstTopics { get; set; }
}
public class Topic
{
    public string TopicName { get; set; }
}

如何在两个模块的技能范围内进行主题计数比较?

我尝试过类似的东西,但看起来非常混乱和错误。

foreach (var mc in m1)
{
    foreach (var v in m2)
    {
        if (v.ModuleCode == mc.ModuleCode)
        {
            foreach (var skillsIC in v.lstKeySkills)
            {
                foreach (var skillsC in mc.lstKeySkills)
                {
                    if (skillsIC.LstTopics.Count() == skillsC.LstTopics.Count())
                    {
                        //Count is the same
                    }
                }
            }               
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用var result = from a in m1 // ModuleA iterable join b in m2 // ModuleB iterable on new { a.ModuleCode, a.Skills.Count } equals new { b.ModuleCode, b.Skills.Count } select new { a, b }; 子句:

background: url(images/60H.png)

答案 1 :(得分:2)

这是一个连接,列表计数匹配。它在LINQ中更容易

var result = m1.Join(m2, a => a.ModuleCode, b => b.ModuleCode, (a,b) => new { A = a, B = b})
           .Where (x => x.A.lstKeySkills.Count() == x.B.lstKeySkills.Count());

在此示例中,result将是可枚举的匿名项目,其中包含2个属性

  • AModuleA
  • BModuleB

AB将始终匹配ModuleCode并且具有相同数量的技能