我一直坐在一个小问题上,希望得到一些帮助。
我有两个模块列表,如下所示。
我基本上想要实现的是跟踪已完成的主题。
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
}
}
}
}
}
}
答案 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个属性
A
是ModuleA
B
是ModuleB
A
和B
将始终匹配ModuleCode
并且具有相同数量的技能