如何将连接表结果设置为Model Class

时间:2011-08-02 04:48:33

标签: linq asp.net-mvc-3 join

我有两个表,如User和UserInfo

  • UsersInfo
    用户ID
    用户名
    电子邮件
    密码
    LastLoginDate
  • 用户
    用户ID
    名字
    姓氏
    ******中国

我想使用join从数据库中获取数据。我已经编写了以下查询来获取上表的结果。

public ViewResult Index()
        {
            List<UserDetailModel> UsersCompleteDetails = (from u in db.Users
                                                          join l in db.UsersInfoes on u.UserId equals l.UserId
                                                          select new { u.UserId, u.UserName, u.Email, u.Password, u.LastLoginDate, l.FirstName, l.LastName, l.PhoneNumber }).ToList<UserDetailModel>;
            return View(UsersCompleteDetails);
        }

以下是自定义类模型

**public class UserDetailModel
{
    //Following details are comes from UsersInfo Table
    public string UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public DateTime LastLoginDate { get; set; }
    //Following details are comes from User Table
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
}**

但是我不知道如何使用查询结果映射自定义类?现在它正在给我关注错误:

无法将方法组'ToList'转换为非委托类型'System.Collections.Generic.List'。你打算调用这个方法吗?

1 个答案:

答案 0 :(得分:1)

您获得的具体错误是因为您在调用ToList之后没有括号,即:ToList<...>()。但是,您有一个更大的问题,即您尝试将匿名类型的列表转换为类型列表。

您可以使用许多库来帮助您将实体映射到Model对象,反之亦然,例如AutoMapper,但您也可以只在模型和数据对象上创建转换方法或使用自动属性初始化这与你的匿名类型相似。

以下示例适用于您的情况,它的格式不是很好,但应该明白这一点。

public ViewResult Index()
{
    List<UserDetailModel> UsersCompleteDetails = (from u in db.Users
                                                  join l in db.UsersInfoes on u.UserId equals l.UserId into userInfo
                                                  from info in userInfo.DefaultIfEmpty()
                                                  select new UserDetailModel() {  
        UserId = u.UserId, 
        UserName = u.UserName, 
        Email = u.Email, 
        Password = u.Password, 
        LastLoginDate = u.LastLoginDate, 
        FirstName = l.FirstName, 
        LastName = l.LastName, 
        PhoneNumber = l.PhoneNumber 
    }).ToList();

    return View(UsersCompleteDetails);
}