Ich habe hier Probleme mit der LINQ-Syntax ... dachte, ich würde sie hier rauswerfen. Ich kann nirgendwo anders genau das finden, wonach ich suche.
OK, sag ich habe das:
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();
Kurz gesagt, ich möchte LINQ verwenden, um meine Liste von Objekten basierend auf Objekten aus einer anderen Liste herauszufiltern. Ich hoffe das macht Sinn. Ich glaube, ich bin nur im Contains-Teil verloren ... Ich weiß nicht, wie ich das schreiben soll.
var rejectList = fullList.Where(i => rejectStatuses.Contains(i.Status));
Ich werde meine ursprüngliche Antwort aktualisieren, um diese Änderung widerzuspiegeln.Speichern Sie dies in einer spezifischeren Sammlung nur der IDs, die Sie nicht möchten
var notTheseBarIds = filterBars.Select(fb => fb.BarId);
dann versuchen Sie dies:
fooSelect = (from f in fooBunch where !notTheseBarIds.Contains(f.BarId) select f).ToList();
oder dieses:
quelle
Ich habe dies nicht versucht, daher garantiere ich jedoch nichts
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; }
quelle
b
, und der Compiler findet sie wahrscheinlich nicht eindeutig.Probieren Sie diesen einfachen LINQ aus:
//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();
quelle