2016-04-18 15 views
0

Zunächst einmal habe ich diese Modelle: enter image description hereExecuting Abfrage: "LINQ to Entitäten nicht erkennt Methode 'System.Object getItem (System.String)'"

Ich habe diese Abfrage in meinem Controller und I will das Abfrageergebnis in das Ansichtsmodell setzen:

var query = (from d in db.ObjectCategories 
        join a in db.MatchingObjects on d.Id equals a.ObjectCategoryId into grp3       
        join b in db.Unlocks 
         on d.Id equals b.ObjectCategoryId into grp1 
        from m in grp1.DefaultIfEmpty() 
        join c in db.Members 
         on m.StudentId equals c.Id into grp2 
        from n in grp2.DefaultIfEmpty() 
        where m.ObjectCategoryId == null 
        && n.Id == null 
        && n.Id == (int)Session["UserId"] 
        orderby d.Id 
        select new LockedCatListViewModel() 
        { 
         AnimalCategory = d.CategoryName, 
         AnimalCategoryId = d.Id, 
         Animals = d.MatchingObjects 
        }).AsEnumerable() 
        .Select(x=> new LockedCatListViewModel() 
        { 
         AnimalCategory = x.AnimalCategory, 
         AnimalCategoryId = x.AnimalCategoryId, 
         Animals = x.Animals 
        }); 
     return View(query.ToList()); 

The view Modell:

public class LockedCatListViewModel 
{ 
    [Display(Name = "Animal Category Name")] 
    public string AnimalCategory { get; set; } 
    public int AnimalCategoryId { get; set; } 
    public virtual ICollection<MatchingObject> Animals { get; set; } 
} 

Jedes Mal, wenn ich in der Schleife das Element will Modell in Ansichtsseite oder Rückkehr gerade dieses Modells auf die Ansichtsseite, bekam ich folgende Fehlermeldung:

enter image description here

ich viele verschiedene Methoden versucht habe, frage ich mich, was in meiner LINQ-Abfrage, um getan werden soll, um das Ergebnis meiner LINQ-Abfrage erhalten?

Problem gelöst, indem Sie die Sitzung in eine Variable zuweisen und die Variable in den Linq einfügen.

Ich glaube, ich habe eine falsche LINQ-Abfrage für diesen Teil

&& n.Id == null 
&& n.Id == (int)Session["UserId"] 

Antwort

2

Es scheint, gibt es eine Reihe von Problemen ist. Erstens muss der Fehler wahrscheinlich auf den Anruf Session in Ihrer linq zurückzuführen sein.

Um dies zu lösen, verschieben Sie den Sitzungsaufruf außerhalb der Anweisung linq und weisen Sie ihn einer Variablen zu.

int userId = (int)Session["userId"]; 

können Sie dann die userId Variable anstelle der Sitzung Aufruf verwenden.

Ich glaube, Sie immer noch Probleme mit Ihrer Anfrage nach diesem finden werden, weil dieser Zeilen:

&& n.Id == null 
&& n.Id == (int)Session["UserId"] //or userId when you change it 

Wie kann die n.Id null sein und einen Wert?

+0

Hallo, Ashley Medway danke für Ihre Antwort, es funktioniert wie ein Charme. –

+1

Kein Problem, Sie werden feststellen, wann immer Sie eine Methode aufrufen müssen, die außerhalb von Linq ausgeführt werden muss und Session ["foo"] ist wirklich ein Methodenaufruf. –

Verwandte Themen