2017-01-23 122 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));