我有一个包含字符串属性的模型,在我的应用程序中,通过选择文件并读取其中的数据,我创建了这些模型的两个集合。我有一个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> SourceDrawingLayers
和List<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
列表中。
有人可以帮忙吗?