2016-04-18 51 views
0

首先,我有這些模型: enter image description hereExcuting查詢:「LINQ到Entitites不能識別方法‘System.Object的的getItem(System.String)’」

我在我的控制,我這個查詢要把查詢結果到視圖模型:

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

視圖模型:

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

然而,每當我想循環內的項目在視圖頁面模型,或者只是回到這個模型視圖頁面,我得到了以下錯誤:

enter image description here

我已經嘗試了許多不同的方法,我不知道應該我LINQ查詢內部完成,以得到我的LINQ查詢的結果?

問題通過分配會話到一個變量解決,並把變量LINQ的內部。

我想我有一個不正確的LINQ查詢這部分

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

回答

2

似乎有一些問題。首先,這個錯誤很可能是由於在你的linq中調用了Session

所以解決這個移動會議通話LINQ的聲明之外,並分配給一個變量。

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

然後,您可以使用userId變量來代替會議呼叫。

我想你還是會找到您的查詢的問題後,這是因爲這些行:

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

n.Id如何可以爲空和價值?

+0

嗨,阿什莉梅德韋感謝您的回覆,它的作品就像一個魅力。 –

+1

沒問題,當你需要調用一個方法時,你會發現它需要在Linq之外完成,而Session [「foo」]實際上是一個方法調用。 –

相關問題