我是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
类型,因为代码使用this扩展名来输出数据。
我尝试了很多方法来解决这个问题。
(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?)
有人可以指出我正确的方向吗?谢谢。
答案 0 :(得分:0)
(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();
有两种可能的解决方案:
他们都有专业和缺点,第二种解决方案需要更多的努力,但它会给你强烈的类型=&gt;减少错误。有几个库可以自动为你做对象映射(例如:AutoMapper
),也许你可以尝试一下。
干杯。