2012-11-13 6 views
9

Ich habe im Wesentlichen:Kann nicht Elemente Ausnahme in EF Abfrage vergleichen

public ActionResult MyAction(List<int> myIds) 
{ 
    var myList = from entry in db.Entries 
      where (myIds == null || myIds.Contains(entry.Id)) 
       select entry; 
    return View(myList); 
} 

Ziel nur die Elemente mit dem übergebenen Ids zu erhalten ist, oder alle von ihnen zurück. (Andere Kriterien snipped für Klarheit)

Ich erhalte eine Ausnahme, wenn ich myList zurückkehren, ich habe einige Debug getan, und es tritt auf, wenn ein .ToList()

tun können nicht Elemente vom Typ vergleichen ‚System.Collections.Generic .Liste "1".
Nur primitive Typen (wie Int32, String und Guid) und Entität Typen werden unterstützt.

+0

Mögliche Duplikat [Kann nicht Elemente vom Typ vergleichen ‚System.Collections.Generic.ICollection \' 1 nur primitive Typen, Aufzählungstypen und Objekttypen unterstützt werden] (http://stackoverflow.com/questions/23937112/cannot-compare-elements-of-type-system-collections-generic-icollection1-only-p) –

+1

Hinweis das wurde eineinhalb Jahre vor seinem "Duplikat" geschrieben –

+0

Antworten sind mehr wichtig als Erstellungsdatum. Siehe http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-event-though-its-much-newer-and-ha/147651#147651. Wenn Sie zustimmen, dass es nicht offensichtlich ist, stimmen Sie bitte auf http://meta.stackexchange.com/questions/281980/add-clarification-link-to-possible-duplicate-automated-comment –

Antwort

22

Das Problem war, weil die myIds null war.

Ich musste:

public ActionResult MyAction(List<int> myIds) 
{ 
    if(myIds == null) 
    { 
     myIds = new List<int>();  
    } 
    bool ignoreIds = !myIds.Any(); 

    var myList = from entry in db.Entries 
       where (ignoreIds || myIds.Contains(entry.Id)) 
       select entry; 
    return View(myList); 
} 
+17

Genauer gesagt war es, weil Sie waren Machen Sie einen Null-Check in der Where-Klausel. – htxryan

+0

Oh! Danke @htxryan. Ich habe deinen Kommentar fast verpasst, aber er hat meine Suche nach weiteren Antworten gerettet – Pallavi