如何解决LinqToSQL返回IQueryable
我的界面返回一个IQueryable
。具有模板和TemplatesAgent
对象的模型IEnumerable<Agent>
。在我的DataService
中,我正在收集ListOfAgent
中的所有代理。然后,我使用AgentVersionKey
选择模板中的代理。这是我遇到的错误,它与IQueryable
类型有关吗?
ExceptionMessage”:“不允许在查询中显式构造实体类型'OrderTemplateTool.Data.Agent'。”,
接口
IQueryable<TemplatesAgent> GetTemplateAgentNameDiseaseName(string agent,string disease);
DataService
public IQueryable<TemplatesAgent> GetTemplateAgentNameDiseaseName(string agent,string disease)
{
//Common
var ListOfAgent = (from a in UnitOfWork.GetRepository<Agent>().Get(a => !a.IsDeleted && a.IsCurrentVersion)
select new Agent
{
VersionKey = a.VersionKey,Name = a.Name,RxNormId = a.RxNormId,BrandNames = a.BrandNames
});
var TemplatesAgent = (from t in UnitOfWork.GetRepository<Template>().Get()
join r in UnitOfWork.GetRepository<Regimen>().Get() on t.Id equals r.TemplateId
join rp in UnitOfWork.GetRepository<RegimenPart>().Get() on r.Id equals rp.RegimenId
join re in UnitOfWork.GetRepository<RegimenEntry>().Get() on rp.Id equals re.RegimenPartId
where t.IsCurrentVersion
&& t.Status == 7
select new TemplatesAgent
{
Template = t,Agent = ListOfAgent.Where(x => x.VersionKey == re.AgentVersionKey).ToList()
});
型号
public class TemplatesAgent
{
public Template Template { get; set; }
public IEnumerable<Agent> Agent { get; set; }
}
控制器
[HttpGet]
public IHttpActionResult TemplatesList(string key,string disease = null,string agent = null)
{
var result = TemplatesDataService.GetTemplateAgentNameDiseaseName(agent,disease)
.Where(
t =>
t.Template.IsCurrentVersion && t.Template.Status == (short)TemplateMode.Published)
.OrderBy(t => t.Template.TemplateIdMain)
.ThenBy(t => t.Template.TemplateIdNumeric)
.ThenBy(t => t.Template.TemplateIdAlt)
.ToList()
.Select(t => new
{
TemplateId = t.Template.TemplateId,RegimenTitle = t.Template.Title,CourseTitle = t.Template.GroupTitle,GuidelineTitle = t.Template.GuideLineTitle,DiseaseId = t.Template.ExternalDiseaseId,DiseaseName = t.Template.DiseaseName
Agent = t.Agent(a => new
{
VersionKey = a.VersionKey,BrandNames = a.BrandNames,RxNormId = a.RxNormId
}).ToList(),})
.Distinct().ToList();
return Json(result);
}
解决方法
它告诉您无法在查询中创建new Agent
。试试这个。
var agentRepo = UnitOfWork.GetRepository<Agent>().Get();
var ListOfAgent = (from a in agentRepo
where !a.IsDeleted && a.IsCurrentVersion
select a);
var TemplatesAgent = (from t in UnitOfWork.GetRepository<Template>().Get()
join r in UnitOfWork.GetRepository<Regimen>().Get() on t.Id equals r.TemplateId
join rp in UnitOfWork.GetRepository<RegimenPart>().Get() on r.Id equals rp.RegimenId
join re in UnitOfWork.GetRepository<RegimenEntry>().Get() on rp.Id equals re.RegimenPartId
where t.IsCurrentVersion
&& t.Status == 7
select new TemplatesAgent
{
Template = t,Agent = ListOfAgent.Where(x => x.VersionKey == re.AgentVersionKey).ToList()
});
控制器
[HttpGet]
public IHttpActionResult TemplatesList(string key,string disease = null,string agent = null)
{
var result = TemplatesDataService.GetTemplateAgentNameDiseaseName(agent,disease)
.Where(
t =>
t.Template.IsCurrentVersion && t.Template.Status == (short)TemplateMode.Published)
.OrderBy(t => t.Template.TemplateIdMain)
.ThenBy(t => t.Template.TemplateIdNumeric)
.ThenBy(t => t.Template.TemplateIdAlt)
.Distinct().ToList();
return Json(result);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。