【问题标题】:Failing to get a List<> of objects after a LINQ queryLINQ 查询后未能获取对象列表<>
【发布时间】:2017-01-23 21:31:39
【问题描述】:

我正在尝试将 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&lt;WorkRole&gt; WorkRolesQuery = db.WorkRoles.Where(c =&gt; 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; }
}

【问题讨论】:

    标签: c# asp.net-mvc entity-framework linq


    【解决方案1】:

    当您调用.FirstOrDefault().ToList(); 时,这意味着您首先选择第一项(如果存在,否则为空),然后尝试将这一项转换为列表(失败)。 只需在 Where() 语句之后调用 ToList() 即可:

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

    【讨论】:

      【解决方案2】:

      FirstOrDefault 仅返回WorkRole 类型的第一个实例,其CompanyId 等于您的UsrCompanyId,而不是整个列表。所以你不能在那个实例上调用ToList。我想你可以省略对FirstOrDefault的调用:

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

      【讨论】:

        【解决方案3】:

        您尝试调用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()
        

        【讨论】:

          【解决方案4】:

          你要找的是……

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

          由于 FirstOrDefault 返回单个实体。

          【讨论】:

            【解决方案5】:

            您不能使用ToList(),因为FirstOrDefault() 返回一项或null。如果您希望退回多于一件商品,请使用While(),然后使用ToList(),不要使用FirstOrDefault()

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

            还请注意,如果您使用的是FirstOrDefault(),您可以直接传入条件而无需使用Where()

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

            【讨论】:

              【解决方案6】:

              你可以这样做:

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

              【讨论】:

                猜你喜欢
                • 2014-01-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-05-07
                相关资源
                最近更新 更多