2017-01-23 171 views
1

我想我的結果將我的LINQ查詢到一個列表後獲得對象的List <>,但沒有成功,直到如今。失敗LINQ查詢

This is my action method : 

public ActionResult DisplayListOfRolesUser() 
{    
    string currentUserId = User.Identity.GetUserId();//get the id of the logged user 

    UserDetails userDetails = db.UsersDetails.Where(c => c.identtyUserId == currentUserId) 
    .FirstOrDefault(); 
    int UsrCompanyId = userDetails.CompanyId;//get the user's company 

    List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId) 
    .FirstOrDefault().ToList();//get all the work roles for the compnay. 

    //List<WorkRole> lst = WorkRolesQuery.ToList(); 

    return View(lst); 
} 

我嘗試了許多堆棧溢出的答案,但沒有成功。

目前List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).FirstOrDefault().ToList();

ToList是強調用紅色和它說「WorkRole」不包含「ToList」的定義。

我只是想有WorkRole對象的列表,所以我可以在我的某種形式的視圖中顯示它們。

有人可以幫忙嗎?

這裏是我的型號還有:

public class WorkRole 
{ 
    [Key] 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

    public int WorkRoleId { get; set; } 
    public string RoleName { get; set; } 
    public string RoleDescription { get; set; } 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 
    public virtual ICollection<WorkRolesUsersDetails> WorkRolesUsersDetails { get; set; } 
} 

回答

2

當你調用.FirstOrDefault().ToList();,這意味着你首先選擇的第一項(如果存在的話,否則返回null),然後嘗試將這一項轉換爲列表(失敗)。 只需將Where()後聲明呼籲ToList()應該這樣做:

List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 
2

您嘗試獲得第一個元素(只有一個元素)調用FirstOrDefault()並投它列出。

替換此行:

List<WorkRole> WorkRolesQuery = 
       db.WorkRoles 
       .Where(c => c.CompanyId == UsrCompanyId) 
       .FirstOrDefault() 
       .ToList(); 

本:

List<WorkRole> WorkRolesQuery = 
       db.WorkRoles 
       .Where(c => c.CompanyId == UsrCompanyId) 
       .ToList();  // without FirstOrDefault() 
2

FirstOrDefault回報只是WorkRole類型,其CompanyId等於你UsrCompanyId,而不是整個列表的第一個實例。所以,你不容呼籲該實例ToList。我想你可以省略調用FirstOrDefault

var WorkRolesQuery = db.WorkRoles 
    .Where(c => c.CompanyId == UsrCompanyId) 
    .ToList(); 
1

什麼你要找的是...

List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 

由於FirstOrDefault返回一個單一的實體。

1

不能使用ToList()因爲FirstOrDefault()返回一個項目或空。如果你期待一個以上的項目要返回,使用While()然後ToList(),不要使用FirstOrDefault()

var WorkRoles = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 

另外請注意,如果你正在使用FirstOrDefault(),您可以在狀態輕鬆過關,而不必使用Where()

var WorkRole = db.WorkRoles.FirstOrDefault(c => c.CompanyId == UsrCompanyId); 
0

你可以這樣做:

List<WorkRole> WorkRolesQuery = new List<WorkRole>(db.WorkRoles 
.Where(c => c.CompanyId == UsrCompanyId));