2010-05-30 4 views
6

Wie durchlaufen Sie durch IQueryable und entfernen Sie einige Elemente, die ich nicht benötige.LINQ: Wie Element aus IQueryable zu entfernen <T>

Ich suche so etwas wie dieses

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId); 
foreach(Item item in items) 
{ 
    if(IsNotWhatINeed(item)) 
    items.Remove(item); 
} 

Ist es möglich? Vielen Dank im Voraus

Antwort

10

sollte es möglich sein, dass die Abfrage wie weiter unten in diesem

var filtered = items.Where(itm => IsWhatINeed(itm)); 

Auch die subtile Veränderung der Boolesche Funktion auf eine bestätigende bemerken eher als eine negative. Das (das Negative) ist der Operator not.

+2

Mit einer solchen optimistischen und positiven Funktion können Sie auch 'items.Where (IsWhatineed)' schreiben. – Kobi

+0

danke Anthony und Kobi – Aximili

+1

Die positive Version einer Funktion beseitigt auch das doppelte negative Szenario: '! IsNotWhatineed()' –

9
items = items.Where(x => !IsNotWhatINeed(x)); 
+0

Ich möchte hinzufügen, dass in LINQ, wie mit allen Funktionscode, es vorzuziehen ist, eine neue Liste von alten zu erhalten, indem Sie einen Filter anwenden, anstatt Änderungen daran vorzunehmen. – chakrit

3
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatINeed(x)); 

oder

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId) 
    .Where(x=> !IsNotWhatINeed(x)); 
1

Dieses Versuchen:

var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatYouNeed(x)); 
2

Die anderen Antworten sind richtig, dass Sie weiter verfeinern die Abfrage mit 'wo' Aussage. Ich nehme jedoch an, dass Ihre Abfrage eine Linq2Sql-Abfrage ist. Sie müssen also sicherstellen, dass Sie die Daten im Speicher haben, bevor eine weitere Filterung mit einer benutzerdefinierten Funktion:

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId) 
    .ToList(); // fetch the data in memory 

var itemsToRemove = items.Where(IsNotWhatINeed); 

Wenn Sie wirklich das IQueryable erweitern wollen, dann ist die ‚IsNotWhatINeed‘ -Funktion muss etwas umgesetzt werden, die Linq2Sql versteht .

+0

Danke Jeroenh, können Sie mir erklären oder geben Sie mir ein Beispiel, was Linq2Sql Abfrage ist und was Linq2sql versteht bitte? Vielen Dank! – Aximili