2012-11-13 4 views
9

Ho essenzialmente:non si può paragonare elementi eccezione nella query EF

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); 
} 

L'obiettivo è quello di ottenere solo gli elementi con i Ids passati o restituire tutti loro. (Altri criteri snipped per chiarezza)

io sono sempre un'eccezione quando torno myList, ho fatto un po 'di debug e si verifica quando si fa un .ToList()

non si può paragonare elementi di tipo 'System.Collections.Generic .List`1' .
Sono supportati solo i tipi primitivi (come Int32, String e Guid) ei tipi di entità .

+0

Possibile duplicato (http://stackoverflow.com/questions/23937112/cannot-compare-elements-of-type-system-collections-generic-icollection1-only-p) –

+1

Nota che questo è stato scritto un anno e mezzo prima del suo "duplicato" –

+0

Le risposte sono più importante della data di creazione. Vedi http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its-much-newer-and-ha/147651#147651. Se accetti che non è ovvio, vota su http://meta.stackexchange.com/questions/281980/add-clarification-link-to-possible-duplicate-automated-comment –

risposta

22

Il problema era perché i myIds erano nulli.

avevo bisogno di:

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); 
} 
[sono supportati Impossibile confrontare gli elementi di tipo 'System.Collections.Generic.ICollection \ `1 tipi Solo primitivi, tipi di enumerazione e tipi di entità]
+17

Più specificamente, è stato perché eri fare un controllo nullo nella clausola 'where'. – htxryan

+0

Oh! grazie @htxryan. Ho quasi perso il tuo commento, ma mi ha salvato la ricerca di ulteriori risposte – Pallavi