LINQ在List中的特定属性上的Distinct()

时间:2016-11-30 17:46:00

标签: c# linq

所以当我看到我有时会有重复的单词时,我最终会为孩子们做一个阅读游戏。所以我想我自己,让我们做一个独特的。但它有点复杂。

所以我理解如何在整数或字符串列表中使用Distinct以及如何在列表中的属性上使用DistinctBy()。

但我无法弄清楚如何在对象列表中的字符串列表中的属性上执行此操作。

B计划是ForEaches的一大部分,但我正在寻找更优雅的东西。

所以这就是结构:

List<MyObject>()
{
    OtherObject BsObject1;
    OtherObject BsObject2;
    List<String>();
}

所以日期如下:

MyObject1: List<String>: "word1", "word2"
MyObject2: List<String>: "word3", "word4"
MyObject3: List<String>: "word1", "word5"
MyObject4: List<String>: "word5", "word6"

只要一个单词在任何其他列表中,该单词就可以被删除。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据你的问题,我假设你的例子中唯一剩下的对象是MyObject2,因为word1存在于对象1和3中,而word5存在于对象3和4中。

List<MyObject> objects; // Populate your data here... Strings is the name of the List<String> property.
var distinctObjects = objects.Where(
    mo => !mo.Strings.Intersect(
        objects.Except(new List<MyObject>() { mo }).SelectMany(mobj => mobj .Strings))
    .Any()).ToList();

对于每个项目,此语句检查其中字符串列表中的字符串是否包含在所有其他项目中的字符串的并集中。如果这不是空的(!Any()),那么该项目仍然存在。