如何使用L2E / S限制选择项目?

时间:2010-06-10 19:58:52

标签: linq-to-sql asp.net-mvc-2 linq-to-entities

此代码是禁止的

var errors = (from error in db.ELMAH_Error
         select new
         {
             error.Application,
             error.Host,
             error.Type,
             error.Source,
             error.Message,
             error.User,
             error.StatusCode,
             error.TimeUtc
         }).ToList();

return View(errors);

因为它导致'需要一个IEnumerable类型的模型'错误。以下代码当然可以正常工作,但选择所有列,其中一些我根本不感兴趣:

var errors = (from error in db.ELMAH_Error
         select error).ToList();

return View(errors);

我是MVC2 + L2E的新品牌,所以也许我只是没有思考正确的思维方式,但这似乎是违反直觉的。是否有一种简单的方法可以选择有限数量的列,或者这只是使用ORM的一部分?

1 个答案:

答案 0 :(得分:1)

这不是L2E / L2S的问题,而是MVC强类型视图。

我认为这不仅仅是“需要IEnumerable类型的模型”,而是“类型为IEnumerable<Something>的模型”。如果您有一个强类型视图绑定到错误表的类型,然后尝试传递查询创建的匿名类型(通过select new {...})将导致类型不匹配。

您可以创建一个仅包含所需行的新类型,并将其用作视图页面模型,或者您可以执行完全选择,然后限制ASP代码中的列。