我正在为LINQ语法here...thought而苦苦挣扎,我想在这里抛出它。我在别的地方找不到我想要的东西。
好的,假设我得到了这个:
public class Bar
{
public int BarId { get; set; }
}
public class Foo
{
public List<Bar> BarList { get; set; }
}
List<Foo> fooBunch = GetABunchOfFoos(); //let's just assume I'm getting more than one
List<Foo> fooSelect = new List<Foo>;
List<Bar> filterBars = GetAFewBars(); //assume I'm getting like 2 or 3
fooSelect = (from f in fooBunch
where !(from b in f.BarList select b.BarId).Contains(ITEM FROM filterBars.BarId)
select f).ToList();所以,长话短说,我想使用LINQ根据另一个列表中的对象过滤出我的对象列表。我希望这是有意义的。我想我只是迷失在包含部分……我不知道该怎么写。
发布于 2011-04-13 03:09:22
通常,您要查找的是"Except“扩展。
var rejectStatus = GenerateRejectStatuses();
var fullList = GenerateFullList();
var rejectList = fullList.Where(i => rejectStatus.Contains(i.Status));
var filteredList = fullList.Except(rejectList);在本例中,GenerateRegectStatuses()应该是您希望拒绝的状态列表(或者根据您的示例,更具体地说,是In的List<int> )
发布于 2011-04-13 03:09:31
将其转储到一个更具体的集合,其中只包含您不需要的ids
var notTheseBarIds = filterBars.Select(fb => fb.BarId);然后试试这个:
fooSelect = (from f in fooBunch
where !notTheseBarIds.Contains(f.BarId)
select f).ToList();或者这样:
fooSelect = fooBunch.Where(f => !notTheseBarIds.Contains(f.BarId)).ToList();发布于 2011-04-13 03:10:12
我没有尝试过这个,所以我不能保证任何东西。
foreach Bar f in filterBars
{
search(f)
}
Foo search(Bar b)
{
fooSelect = (from f in fooBunch
where !(from b in f.BarList select b.BarId).Contains(b.ID)
select f).ToList();
return fooSelect;
}https://stackoverflow.com/questions/5640259
复制相似问题