C# 如何获得不在另一个列表中的项目列表

C# 如何获得不在另一个列表中的项目列表,c#,.net,linq,list,except,C#,.net,Linq,List,Except,我想从一个名字不在第二个列表中的列表中获得一个蜜蜂名字的列表 var myList=(from f in Beers where ... select f.BeerNames).ToList var storeList(from f in Store where... select f).ToList() MyList将有一些不在商店列表中的啤酒名称。我怎么找到那些啤酒?我尝试了。除了和!包含,但我意识到我做错了什么,缺少了一些关键

我想从一个名字不在第二个列表中的列表中获得一个
蜜蜂名字的列表

var myList=(from f in Beers where ...
              select f.BeerNames).ToList

var storeList(from f in Store where...
                select f).ToList()
MyList将有一些不在商店列表中的啤酒名称。我怎么找到那些啤酒?我尝试了
。除了
!包含
,但我意识到我做错了什么,缺少了一些关键知识。 谢谢

如果我改变

var storeList(from f in Store where...
                select f).ToList()


然后我可以使用except,比如
List1.except(List2)
。我不确定是否有更好的办法。抱歉,各位,如果这不清楚…我正在尝试:)

除了应该使用字符串类型之外

var myList = MyFrig.Select(f => f.BeerNames).Except(Store).ToList();

Exception应与字符串类型一起使用

var myList = MyFrig.Select(f => f.BeerNames).Except(Store).ToList();
除了工作很好

我怀疑问题在linq查询返回的项中。 看起来,first中的f.BeerNames和StoreList中的f并没有指向相同的数据类型

对于异质型

var list1 = from s in new String[] {"ABC1","ABC2", "ABC3", "ABC4"} select new {BeerName=s,Id = Guid.NewGuid().ToString()}  ;
var list2 = new String[] {"ABC3","ABC4", "ABC5", "ABC6"} ;
var intermediateList = list1.Select(i=>i.BeerName).Except(list2);
var list3 = from l1 in list1
        join l2 in intermediateList on l1.BeerName equals l2
        select l1;


list1.Dump(); // run in linqPad
intermediateList.Dump();// run in linqPad
list3.Dump();// run in linqPad
清单3返回以下内容

蜂名Id

ABC1 569ace9a-66c4-46aa-bbf5-50d586a2886f

ABC2 af456094-9692-4771-b489-8b3cca8aa938

用于运行上述命令,或删除.Dump()以在VS中执行

除了工作很好

我怀疑问题在linq查询返回的项中。 看起来,first中的f.BeerNames和StoreList中的f并没有指向相同的数据类型

对于异质型

var list1 = from s in new String[] {"ABC1","ABC2", "ABC3", "ABC4"} select new {BeerName=s,Id = Guid.NewGuid().ToString()}  ;
var list2 = new String[] {"ABC3","ABC4", "ABC5", "ABC6"} ;
var intermediateList = list1.Select(i=>i.BeerName).Except(list2);
var list3 = from l1 in list1
        join l2 in intermediateList on l1.BeerName equals l2
        select l1;


list1.Dump(); // run in linqPad
intermediateList.Dump();// run in linqPad
list3.Dump();// run in linqPad
清单3返回以下内容

蜂名Id

ABC1 569ace9a-66c4-46aa-bbf5-50d586a2886f

ABC2 af456094-9692-4771-b489-8b3cca8aa938


用于运行上述操作,或删除.Dump()以在VS中执行。

您可以发布实体的详细信息吗?你看了吗:或者这个:你能发布你实体的详细信息吗?你看了:还是这个:嗨,阿杜奇。myList已经有了一份有效的啤酒清单。我想要的是第三个查询,将myList与storeList进行比较,结果是myList中不在storeList中的啤酒列表。对不起,MyFrig是个坏例子。我来换。嗨,阿杜奇。myList已经有了一份有效的啤酒清单。我想要的是第三个查询,将myList与storeList进行比较,结果是myList中不在storeList中的啤酒列表。对不起,MyFrig是个坏例子。Tilak,我想我不能比较列表1和列表2,因为列表2是一个商店列表。我尝试了List2.Select(x=>x.BeerName)。除了(List1),但这会从List2返回数据。List1、List2、list3只是示例。你有两个案例1。您只需要选择字段(比如BeerName)。所选字段在两个查询中都是相同的(即x.BeerName是字符串,List1是字符串列表),然后是List2.Select(x=>x.BeerName)。除了(List1)应该可以在2中使用之外。如果查询结果是异构的,并且您需要list2项的所有字段,条件是BeerName不应存在于列表1中,则需要联接。Tilak,我认为我无法将list1与list2进行比较,因为list2是一个存储列表。我尝试了List2.Select(x=>x.BeerName)。除了(List1),但这会从List2返回数据。List1、List2、list3只是示例。你有两个案例1。您只需要选择字段(比如BeerName)。所选字段在两个查询中都是相同的(即x.BeerName是字符串,List1是字符串列表),然后是List2.Select(x=>x.BeerName)。除了(List1)应该可以在2中使用之外。如果查询结果是异构的,并且您需要list2项的所有字段,条件是BeerName不应存在于列表1中,则需要联接。