0

我試圖讓登錄的用戶的結果比較,但收到此錯誤:不能在LINQ

「不能比較類型‘System.Linq.IQueryable`1’只有 原始類型的元素。 ,枚舉類型和實體類型都支持「

這裏是我申請在我的索引行動查詢:

var viewModel = new PointsViewModel(); 
      viewModel.Point = db.Point.ToList(); 
      viewModel.Redeem = db.Redeem.ToList(); 


      TempData["UserPoints"] = null; 
      var usrname = (from a in db.Instructors 
          where a.Email == User.Identity.Name 
          select new { a.PersonID }); 

      if (usrname.Count().Equals(0)) 
      { 
       TempData["UserPoints"] = "You have not earn any points yet."; 
       return View(); 
      } 

      viewModel.instructor = db.Instructors 
        .Where(i => i.PersonID.Equals(usrname))// if I directly insert id here then it works properly but I don't want direct inserts 
        .Single(); 
      PopulateAssignedPointData(viewModel.instructor); 
      return View(viewModel); 

請^ h ELP我這個,請...我無法找到谷歌

回答

0

這是因爲,您將usrname作爲參數傳遞給另一個查詢。 usrname查詢,不是,所以你需要檢索查詢的值(在這種情況下,通過使用First(),但你可以很容易地使用Single()如果你喜歡)之前,你可以使用它作爲另一個查詢中的參數。我建議以下變化:

if (!usrname.Any()) 
{ 
    TempData["UserPoints"] = "You have not earn any points yet."; 
    return View(); 
} 

var personId = usrname.First(); 

viewModel.instructor = db.Instructors 
    .Where(i => i.PersonID.Equals(personId)) 
    .Single(); 

我也改變usrname.Count().Equals(0)!usrname.Any(),因爲它是更地道(它將使用SQL的exists關鍵字,而不是count

+0

我在應用您的解決方案時遇到此錯誤「無法創建類型爲」匿名類型「的常量值,僅在此上下文中支持基本類型或枚舉類型。」 – Anony

+0

@UsamaSheikh:這是一段代碼你的功能。這聽起來像你試圖把它放在你的功能之外。 –

+0

非常感謝你的工作 – Anony

0

嘗試任何解決方案中使用這樣的:

viewModel.instructor = db.Instructors 
       .Where(i => usrname.Any(u => u.PersonID == i.PersonID)) 
       .Single(); 
+0

'i.PersonID.Equals() '會返回一個bool,這是(希望)與'u.PersonID'不同的類型。不完全確定你所得到的是什麼,但實際上它不起作用。 – RoadieRich

+0

謝謝@RoadieRich,複製粘貼操作後我沒有更新代碼。 –