我想从名单不在第二个列表中的列表中获得BeerNames
的列表。
var myList=(from f in Beers where ...
select f.BeerNames).ToList
var storeList(from f in Store where...
select f).ToList()
MyList将有一些不在StoreList上的BeerNames。我如何找到那些BeerNames?我尝试了.Except
和!Contains
,但我发现自己做错了什么,并且缺少一些关键知识。
感谢
如果我改变
var storeList(from f in Store where...
select f).ToList()
到
var storeList(from f in Store where...
select f.BeerNames).ToList()
然后我可以使用除List1.Except(List2)
之外的其他内容。我不确定是否有更好的方法。对不起大家,如果不清楚......我正在尝试:)
答案 0 :(得分:2)
var list1 = new String[] {"ABC1","ABC2", "ABC3", "ABC4"} ;
var list2 = new String[] {"ABC3","ABC4", "ABC5", "ABC6"} ;
var list3 = list1.Except(list2); // list3 holds ABC1, ABC2
除了工作正常。
我怀疑问题出在linq查询返回的项目中。 看起来好像是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
list3返回以下
BeerName Id
ABC1 569ace9a-66c4-46aa-bbf5-50d586a2886f
ABC2 af456094-9692-4771-b489-8b3cca8aa938
使用LinqPad运行上述操作,或删除.Dump()以在VS中执行。
答案 1 :(得分:1)
除了应该使用字符串类型
var myList = MyFrig.Select(f => f.BeerNames).Except(Store).ToList();