Linq 如何将联接表结果设置到模型类中
我有两个表,如User和UserInfoLinq 如何将联接表结果设置到模型类中,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
- 用户信息
用户ID
用户名
电子邮件
密码
拉斯洛金代特酒店 - 用户
用户ID
名字
姓氏
电话号码
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);
}