【发布时间】:2019-01-28 17:22:34
【问题描述】:
我是 .Net Entity 框架的新手,正在寻找一种方法来编写一个可以接受两个可选参数的函数。有没有更好的方法来做到这一点?
public IQueryable<Template> GetTemplateAgentKeyDiseaseId(Guid agentKey, Guid diseaseId)
{
if (diseaseId != null)
{
return 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
join a in UnitOfWork.GetRepository<Agent>().Get() on re.AgentVersionKey equals a.VersionKey
where a.VersionKey == agentKey && t.IsCurrentVersion
select t;
}
else if (agentKey != null)
{
return 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
join a in UnitOfWork.GetRepository<Agent>().Get() on re.AgentVersionKey equals a.VersionKey
where t.IsCurrentVersion && t.ExternalDiseaseId == diseaseId
select t;
}else
{
return 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
join a in UnitOfWork.GetRepository<Agent>().Get() on re.AgentVersionKey equals a.VersionKey
where a.VersionKey == agentKey && t.IsCurrentVersion && t.ExternalDiseaseId == diseaseId
select t;
}
【问题讨论】:
-
这似乎更像是一个 LINQ 问题而不是实体框架。
-
另外,如果你不改变代码的工作方式,你可以将公共部分抽象成一个私有方法,以清理代码。
-
如果我错了,请纠正我,但 Guid 永远不会为空。您可能应该使用 Guid?否则你的最后一条语句将是唯一执行的语句。
-
@ryanwebjackson 任何例子都会有所帮助