C# 在asp.net mvc中使用IQueryable仅选择特定列
我对asp.NETMVC有点陌生。我目前正在处理由另一个人开发的代码,这些代码已经走到了死胡同C# 在asp.net mvc中使用IQueryable仅选择特定列,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我对asp.NETMVC有点陌生。我目前正在处理由另一个人开发的代码,这些代码已经走到了死胡同 IQueryable<DatatableTrainingHistory> trainingView = (from b in db.DatatableTrainingHistorys select b); /* Returns the format needed to output
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
});
上面的代码输出一个错误:
The entity or complex type 'AppModel.DatatableTrainingHistory' cannot be constructed in a LINQ to Entities query.
(二)
IQueryable trainingView=(来自db.DatatableTrainingHistorys中的b
选择新的
{
TrainingName=b.TrainingName,
培训时间=b.培训时间,
配额=b.配额,
位置=b.位置,
}).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?)
无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换(是否缺少强制转换?)
谁能帮我指一下正确的方向吗?谢谢。(1)DatatableTrainingHistory
是一个实体对象,不能在LINQ查询中使用实体对象
(2) 。您返回的是匿名对象
,因此应该对其使用var
var trainingView = (from b in db.DatatableTrainingHistorys
select new
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
}).AsQueryable();
有两种可能的解决方案:
- 使用匿名对象(作为问题的第(2)点)
- 引入新的数据传输对象
AutoMapper
),也许您可以尝试一下
干杯。(1)DatatableTrainingHistory
是一个实体对象,不能在LINQ查询中使用实体对象
(2) 。您返回的是匿名对象
,因此应该对其使用var
var trainingView = (from b in db.DatatableTrainingHistorys
select new
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
}).AsQueryable();
有两种可能的解决方案:
- 使用匿名对象(作为问题的第(2)点)
- 引入新的数据传输对象
AutoMapper
),也许您可以尝试一下
干杯。不幸的是,将类型更改为var仍然会导致
无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换(是否缺少转换?
)。我将尝试阅读更多关于DTO的内容。@BaskoroS。我认为异常是在其他地方抛出的,您的代码看起来非常好(我测试过),不幸的是,将类型更改为var仍然会使我无法隐式地将类型“System.Linq.IQueryable”转换为“System.Linq.IQueryable”。存在显式转换(是否缺少转换?
)。我将尝试阅读更多关于DTO的内容。@BaskoroS。我认为异常被抛出到其他地方,您的代码看起来完全正常(我测试过)
var trainingView = (from b in db.DatatableTrainingHistorys
select new
{
TrainingName = b.TrainingName,
TrainingTime = b.TrainingTime,
Quota = b.Quota,
Location = b.Location,
}).AsQueryable();