LINQ-比较我的模型的两个共享属性值不相等的列表

时间:2019-11-28 03:17:25

标签: c# linq

我有一个包含字符串属性的模型,在我的应用程序中,通过选择文件并读取其中的数据,我创建了这些模型的两个集合。我有一个LayerModel类型的Source集合和Target集合。每个layermodel代表用户选择的图形文件中的一个图层,并具有我要使用的每个相关设置的属性。

模型如下:

public class LayerModel : IEquatable<LayerModel>
{
    public string Path { get; set; }

    public string Name { get; set; }

    public string OnOff { get; set; }

    public string Freeze { get; set; }

    public string Color { get; set; }

    public string Linetype { get; set; }

    public string Lineweight { get; set; }

    public string Transparency { get; set; }

    public string Plot { get; set; }
}

我想使用LINQ比较那些模型,以从目标集合中生成对象列表,这些对象的特定属性值不等于源集合。

我有List<LayerModel> SourceDrawingLayersList<LayerModel> TargetDrawingLayers。前几天,我对这个应用程序有一个类似的问题,我能够产生一个集合,其中添加了所有完全没有差异的单个模型,这很棒,但是现在我需要深入研究并获得特定的差异。

这是我尝试过的。我在此处发布的第一行不返回任何内容,其中OnOff是我要比较的属性:

List<LayerModel> onOffMismatch = TargetDrawingLayers.Where(c => !SourceDrawingLayers.Any(d => c.OnOff == d.OnOff)).ToList();

我认为我在逻辑上遇到问题,因此我尝试将其反转并将方法更改为:

List<LayerModel> onOffMismatch = TargetDrawingLayers.Where(c => SourceDrawingLayers.Any(d => c.OnOff != d.OnOff)).ToList();

这将返回TargetDrawingLayers集合中的每个图层。

我现在意识到我需要进行以下比较:

查看TargetDrawingLayers列表中的所有层,找到其Name属性具有相同值的任何SourceDrawingLayer,然后比较OnOff属性。如果属性不同,我将其添加到列表中。另外,如果在源大学中未找到目标层,请将其添加到单独的ExtraLayers列表中。

有人可以帮忙吗?

0 个答案:

没有答案