我对ASP.NET MVC很陌生,事实上这是我第一次使用它。我想构建简单的TaskList。我在ASP.NET中相当不错,但对ASP.NET MVC或Linq几乎一无所知,所以在回答时请记住这一点。
我正在使用CodeFirst Entity Frameword来生成Db。
我有两个表Users(id,name)和Tasks(id,userid,name)。我创建了两个包含Users和Tasks属性的Model对象。因此,不要将int userID作为数据库设计,而是建议我在Task类中有一个User类来将Task连接到某个User。
不知何故,我设法使用LINQ创建联接
var model = from t in _db.Tasks
join u in _db.Users on t.User.ID equals u.ID
select new { UserID = u.ID,UserName = u.Name,t.Name,t.ID };
return View(model);
但我无法将其绑定到视图,我将其绑定到任务模型,这可能会导致此错误。
我如何解决这个问题,也许我需要创建某种类型的ViewModel或类似的东西?
...谢谢
答案 0 :(得分:1)
您的Linq查询使用所谓的延迟执行。这意味着查询本身不包含任何记录,您必须对其执行某些操作才能使其执行。
所以试试这个:
return View(model.ToList());
答案 1 :(得分:1)
您应该创建一个ViewModel并将其传递给您的视图:
public class TaskViewModel
{
public int TaskId { get; set; }
public string TaskName { get; set; }
public int UserId { get; set; }
public int Username { get; set; }
}
创建一个强类型视图:
@model IEnumerable<YourNamespace.Models.TaskViewModel>
//Display model data
和Linq查询:
var model = from t in _db.Tasks
join u in _db.Users on t.User.ID equals u.ID
select new TaskViewModel
{
TaskId = t.ID,
TaskName = t.Name,
UserId = u.ID,
Username = u.Name
};