2009-04-28 2 views
2

Ich versuche, die folgende Abfrage in LLBL durchzuführen, und ich habe nicht viel Glück.LLBL: Löschen wo nicht in

DELETE FROM dbo.MyTable WHERE MyTableId NOT IN ('39', '43', '44') 

Im Grunde bin ich bis zu diesem Punkt:

private static void Delete(MyTableCollection newRecs) 
{ 
    PredicateExpression filter = new PredicateExpression(); 
    MyTableCollection allRecords = new MyTableCollection(); 

    filter.Add(new FieldCompareSetPredicate(
        MyTableFields.MyTableId, 
        MyTableFields.MyTableId, 
        SetOperator.In, null, null, string.Empty, 0, null, true)); 

    allRecords.DeleteMulti(filter); 
} 

Ich bin mir nicht sicher, ob der obige Code korrekt ist, aber ich bin nicht zu verstehen, wie ich newRecs als Sammlung liefern von Datensätzen, die in meiner IN-Klausel verwendet werden sollen. Bin ich sogar nah dran?

Jede Hilfe würde sehr geschätzt werden.

HINWEIS: Ich weiß, dass ich statische IDs in meinem SQL-Beispiel verwendet habe, aber ich versuche wirklich, die IDs zu verwenden, die im Parameter newRecs gespeichert sind.

Antwort

4

Um das "nicht in" zu funktionieren, müssen Sie eine Art Array übergeben. Versuchen Sie etwas wie dieses:

List<int> idsNotToDelete = new List<int>(); 
foreach (MyTableEntity ent in newRecs) 
{ 
    idsNotToDelete.Add(ent.MyTableId); 
} 
PredicateExpression filter = new PredicateExpression(MyTableFields.MyTableId != idsNotToDelete) 
MyTableCollection allRecords = new MyTableCollection(); 
allRecords.DeleteMulti(filter);