我一直在尝试编写LINQ语句,该语句将比较来自相同类型对象模型的两个集合的属性,并生成OnOff
属性不同的那些的第三集合。我现在只使用LINQ大约一个星期,所以我还是很习惯。
我的理解是,联接将合并两个集合,并丢弃其中完全相同的所有项目,因此您不会重复。
我得到建议尝试使用Join
来做到这一点,但我已经接近了,但我还没到那里。
我的模型具有名称,OnOff,颜色等字符串属性。我试图按名称匹配集合中的模型,然后给我一个OnOff属性不同的模型。
写出我需要的,对于LayerModel
中的每个SourceDrawingLayers
,调查LayerModel
中的每个TargetDrawingLayers
,看看是否找到一个与{{1 }}。如果这样做,请检查Name
属性。如果不相等,则OnOff
到OnOffConflictLayers集合。
我尝试使用嵌套的Add
语句和foreach
x from
和LINQ查询来执行此操作,但是我得到了大量重复项。那是向我建议Join的时候。我只需要帮助将它带回家。
到目前为止,我有这个:
from
完成后,我必须使用以下结果填充集合:
var onOffQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on source.Name equals target.Name
//give me every target where target.OnOff does not equal source.OnOff
select new { target.OnOff }; //I don't know if I need this line it's just where I'm stuck at right now.
我将非常感谢您尝试运行的此查询(可能非常简单)的帮助。谢谢!
更新:请参见下面的修改。
ObservableCollection<LayerModel> q = new ObservableCollection<LayerModel>(onOffQuery);
OnOffConflictLayers = q;
编辑:Matt U在下面的回答是正确的。我错误地没有正确设置目标图形,并且所有的on / off属性实际上都是相同的,所以难怪我的代码什么也没返回。
将马特的答案标记为正确。