簡體   English   中英

比較兩個對象C#的列表計數

[英]Comparing list counts with of two objects C#

我一直在遇到一個小問題,希望能有所幫助。

我有兩個模塊列表,如下所示。

我基本上想要實現的是跟蹤已完成的主題。

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
                    }
                }
            }               
        }
    }
}

您可以使用join子句:

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 };

這是一個聯接,列表計數匹配。 在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匹配,並且具有相同的技能數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM