Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何将联接表结果设置到模型类中_Linq_Asp.net Mvc 3_Join - Fatal编程技术网

Linq 如何将联接表结果设置到模型类中

Linq 如何将联接表结果设置到模型类中,linq,asp.net-mvc-3,join,Linq,Asp.net Mvc 3,Join,我有两个表,如User和UserInfo 用户信息 用户ID 用户名 电子邮件 密码 拉斯洛金代特酒店 用户 用户ID 名字 姓氏 电话号码 我想使用join从数据库获取数据。我编写了以下查询以从上表和下表中获得结果 public ViewResult Index() { List<UserDetailModel> UsersCompleteDetails = (from u in db.Users

我有两个表,如User和UserInfo

  • 用户信息
    用户ID
    用户名
    电子邮件
    密码
    拉斯洛金代特酒店
  • 用户
    用户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);
        }
但是我不知道如何用查询结果映射自定义类?现在它给了我以下错误:


无法将方法组“ToList”转换为非委托类型“System.Collections.Generic.List”。您打算调用该方法吗?

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

您可以使用许多库来帮助您将实体映射到模型对象,反之亦然,但您也可以仅在模型和数据对象本身上创建转换方法,或者使用自动属性初始化,这与生成匿名类型类似

下面的例子应该适用于您的案例,它的格式不太好,但应该能让人明白这一点

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);
}
公共视图结果索引() { List UsersCompletedDetails=(从db.Users中的u开始) 在u.UserId上的db.UsersInfoes中加入l.UserId等于在userInfo中加入l.UserId 来自userInfo.DefaultIfEmpty()中的信息 选择新的UserDetailModel(){ UserId=u.UserId, 用户名=u.UserName, 电子邮件=美国电子邮件, 密码=u.密码, LastLoginDate=u.LastLoginDate, FirstName=l.FirstName, LastName=l.LastName, PhoneNumber=l.PhoneNumber }).ToList(); 返回视图(UsersCompletedDetails); }
Quintin Robinson:这是公认的解决方案,我已经在您的解决方案的帮助下解决了这个问题。非常感谢您及时给出解决方案。我有一个问题,如果只有Users表有记录,如何修改联接查询?@imdadhusen我修改了答案中的示例,以说明左联接,这样您就可以获得所有
User
记录,而不管它们是否有相关的
UserInfo
记录。
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);
}