LINQ:从列表中选择对象不包含项的地方

问题描述

|| 我在这里用LINQ语法苦苦挣扎...我想在这里扔它。我在其他任何地方都找不到我要找的东西。 好,说我有这个:
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根据另一个列表中的对象过滤掉我的对象列表。我希望这是有道理的。我想我只是在“包含”部分迷路了……我不知道该怎么写。     

解决方法

通常,您正在寻找\“ Except \”扩展名。
var rejectStatus = GenerateRejectStatuses();
var fullList = GenerateFullList();
var rejectList = fullList.Where(i => rejectStatus.Contains(i.Status));
var filteredList = fullList.Except(rejectList);
在此示例中,GenerateRegectStatuses()应该是您希望拒绝的状态的列表(或更具体而言,根据您的示例为ID的“ 2”)     ,将其转储到您不想要的ID的更具体的集合中
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();
    ,我没有尝试过,所以我没有任何保证
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;
}
    ,试试这个简单的LINQ:
//For a file list/array
var files = Directory.GetFiles(folderPath,\"*.*\",SearchOption.AllDirectories);

//simply use Where ! x.Contains
var notContain = files.Where(x => ! x.Contains(@\"\\$RECYCLE.BIN\\\")).ToList();

//Or use Except()
var containing = files.Where(x => x.Contains(@\"\\$RECYCLE.BIN\\\")).ToList();
    notContain = files.Except(containing).ToList();