[英]Selecting only specific columns using IQueryable in asp.net mvc
我是asp.net mvc的新手。 我目前正在使用由另一个人开发的代码,但最终陷入僵局。
IQueryable<DatatableTrainingHistory> trainingView = (from b in db.DatatableTrainingHistorys
select b);
/* Returns the format needed to output DataTable extension */
return DataTablesResult.Create(trainingView, dataTableParam, uv => new
{
//stuff runs here
});
该代码的作用是从表的所有列中选择数据。 我目前需要的是代码选择特定的列,例如TrainingName
, TrainingTime
, Location
和Quota
。 输出必须是IQueryable
类型,因为代码使用此扩展名来输出数据。
我尝试了多种方法来解决此问题。
(1)
IQueryable<DatatableTrainingHistory> trainingView = (from b in db.DatatableTrainingHistorys
select new DatatableTrainingHistory
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
});
上面的代码输出错误:
The entity or complex type 'AppModel.DatatableTrainingHistory' cannot be constructed in a LINQ to Entities query.
(2)
IQueryable<DatatableTrainingHistory> trainingView = (from b in db.DatatableTrainingHistorys
select new
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
}).AsQueryable();
上面的代码显示了一条错误消息:
Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<Project.Models.DatatableTrainingHistory>'. An explicit conversion exists (are you missing a cast?)
谁能指出我正确的方向? 谢谢。
(1)。 DatatableTrainingHistory
是一个实体对象,您根本无法在LINQ查询中使用实体对象。
(2)。 您要返回anonymous object
,因此应使用var
var trainingView = (from b in db.DatatableTrainingHistorys
select new
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
}).AsQueryable();
有两种可能的解决方案:
他们两个都有优点和缺点 ,第二个解决方案需要付出更多的努力,但是它将为您提供强类型=>更少的错误。 有几个库可以为您自动进行对象映射(例如: AutoMapper
),也许您可以尝试一下。
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.