如何比较列表之间的嵌套属性

时间:2015-12-30 16:04:50

标签: c#

所以,我基本上是在创建一个类似版本控制的系统。我有以下课程Form

public class Form
{
    public long Id {get; private set;}
    /* among other things */
}

然后,另一个类是这样的:

public class Conflict
{
    List<Form> localForms;
    List<Form> remoteForms;
    /* among other things */
}

然后是一个维持List Conflict s。

的主要类
public class Main
{
    List<Conflict> conflicts;

    /*
     * more stuff...
    */

    public void AddFormConflict(List<Form> locals, List<Form> remotes)
    {
        ...what goes here?
    }
}

我想确保在即将添加新的Conflict对象时,它不包含重复数据;换句话说,我想将Id参数的List<Form> localsId列表的localForms成员所包含的conflicts进行比较。同样对于遥控器也是如此。此外,我不仅想知道这样的匹配是否存在,而且我还希望得到它的参考。

基本上很长一段时间,我想比较一个对象列表中的属性与另一个类似结构的对象列表中的相应属性......这些属性包含在列表中的另一个类中。

我很确定必须有一些相对简单的方法来做这样的事情,使用linq大约2-3行,对吗?我只是不能为我的生活包裹我的头围绕所有层!啊。请帮忙吗?

1 个答案:

答案 0 :(得分:1)

公开属性

public class Conflict
{
    public List<Form> localForms { get; set; }
    public List<Form> remoteForms { get; set; }
    /* among other things */
}

您可以检查此类重复项

public class Main
{
    List<Conflict> conflicts;

    public void AddFormConflict(List<Form> locals, List<Form> remotes)
    {
        if (conflicts.Any(c => c.localForms.Any(lf => locals.Any(lc => lf.Id == lc.Id))))
        {
            //duplicate found for localForms
        }
        //similarly check for remoteForms
    }
}