Linq to sql 如何使用L2E/S限制所选项目?

Linq to sql 如何使用L2E/S限制所选项目?,linq-to-sql,asp.net-mvc-2,linq-to-entities,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,

这个密码是不可能的

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的一部分?

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

我打赌这不仅仅是“需要一个
IEnumerable
类型的模型”,而是“一个
IEnumerable
类型的模型”。如果将强类型视图绑定到错误表的类型,则尝试向其传递由查询创建的匿名类型(通过
选择新{…}
)将导致类型不匹配


您可以创建一个只包含所需行的新类型,并将其用作您的查看页面模型,也可以只执行完全选择,然后限制ASP代码中的列

事实上,它是一个强类型的视图-在学习教程之后忘记了这一点,所以这就解释了它。如果我理解正确,我会为我的视图创建一个新的强类型(这是否作为标准的.cs文件存在于模型中?),然后我将视图指向IEnumerable,而不是引用IEnumerable,它将绑定到视图的模型?是的,基本上就是这样。然后将您的查询从
selectnew{…}
更改为
selectnewmynewtype(…)
,您就成功了。