C# c通过与其他列表进行比较来删除列表中的元素

C# c通过与其他列表进行比较来删除列表中的元素,c#,linq,C#,Linq,我用C来做这件事。我有3个列表,将从不同的数据库中填充。我想将这3个列表与我的主体列表进行比较,如果主体列表中的某个项目不在这3个列表中,我想将其从主体列表中删除 例如: var list1 = (from a in db.candyStore select brand) var list2 = (from b in db.AnotherCandyStore select brand) var list3 = (from c in db.supermark

我用C来做这件事。我有3个列表,将从不同的数据库中填充。我想将这3个列表与我的主体列表进行比较,如果主体列表中的某个项目不在这3个列表中,我想将其从主体列表中删除

例如:

var list1 = (from a in db.candyStore 
         select brand)
var list2 = (from b in db.AnotherCandyStore
         select brand)

var list3 = (from c in db.supermarket
         select brand)

var princiapalList = (from a in db.candyStore 
     select brand)
有什么办法吗

提前谢谢

您可以使用HashSet的方法:


PrinciapSet现在只包含不在列表中的元素。

您希望测试列表联合中的成员资格

principalSet.Where(x=>list1.Concat(list2).Concat(list3).Contains(x));

例如。

好的,我知道了,我现在没有,我可以加入queryable类型的列表,所以它是这样的:

    var list1 = (from a in db.candyStore 
         select brand);
var list2 = (from b in db.AnotherCandyStore
         select brand);

var list3 = (from c in db.supermarket
         select brand);

var princiapalList = (from cs in list1
                       join acs in list2 on cs.BrandID equals acs.BrandID
                       join sm in list3 on sm.BrandID equals sm.BrandID
                       where cs.BrandID == acs.BrandID && cs.BrandID == sm.BrandID
                       select new { whatever }).toList();

谢谢你们的帮助!我希望这也能帮助其他人

很小的一点,但这里没有3个列表,您有3组IQueryable。它们有时可能表现得像列表,但要小心,因为它们不是那么简单!您是对的,我试图删除一个项目,但出现异常:集合已修改,无法执行Enumeration操作。您确定这对提供的列表有效吗?在我看来,它们就像是实体框架的问题。也许我误解了他想要什么,但我认为他想要的是intersectWith而不是ExceptWith。另外,我认为他只想与brand属性进行比较。这假设princiapalList和其他查询的元素是相同的类型,并且它们实现了Equals&GetHashCode。嘿!是的,我这么问是因为我不确定是否可以删除一个查询项。有什么方法可以让我删除我不想要的元素,然后把整个东西重新转换成可查询的吗?@DionisMatos,你为什么要把它再次转换成可查询的?
    var list1 = (from a in db.candyStore 
         select brand);
var list2 = (from b in db.AnotherCandyStore
         select brand);

var list3 = (from c in db.supermarket
         select brand);

var princiapalList = (from cs in list1
                       join acs in list2 on cs.BrandID equals acs.BrandID
                       join sm in list3 on sm.BrandID equals sm.BrandID
                       where cs.BrandID == acs.BrandID && cs.BrandID == sm.BrandID
                       select new { whatever }).toList();