IEnumerable 概念 - 全部获取和获取一个
IEnumerable concepts - Get All and Get One
我有一个具有 IEnumerable 的函数,它将循环构建一个字符串的记录列表。当我 return 只有一个对象时,我也想使用相同的功能。在中间层有两个函数,一个是 return 列表,另一个是 return 对象。
我是否必须构建一个新函数来接收该对象?
public List<Model.Disease> GetDisease()
{
var Disease = (from Diseases in db.Diseases
select new Model.Disease
{
DiseaseId = Diseases.DiseaseId,
DiseaseName = Diseases.DiseaseName,
drug = (from d in db.Drug
where (Diseases.DiseaseId == d.DiseaseId
select new drug
{
DrugId = d.drug,
DrugName = d.drugName
}).OrderBy(m => m.DrugName).ToList(),
}).OrderBy(d => d.DiseaseName).ToList();
return Disease;
}
}
public List<Model.Disease> GetDiseaseById(Guid DiseaseId)
{
var Disease = (from Diseases in db.Diseases
select new Model.Disease
{
DiseaseId = Diseases.DiseaseId,
DiseaseName = Diseases.DiseaseName,
drug = (from d in db.Drug
where (Diseases.DiseaseId == d.DiseaseId && d.DrugId ==
1)
select new drug
{
DrugId = d.drug,
DrugName = d.drugName
}).OrderBy(m => m.DrugName).ToList(),
}).OrderBy(d => d.DiseaseName).ToList().FirstOrDefault();
return Disease;
}
}
private string BuildreimbursementDisplay(IEnumerable<ReimbursementDisease> displayList)
您应该能够很好地完成以下操作。
public Model.Disease GetFirstDisease()
{
return GetDisease().FirstOrDefault();
}
这样的东西也行
public Model.Disease GetDiseaseById(Guid DiseaseId)
{
return GetDisease().Where(x => x.DiseaseId == DiseaseId).FirstOrDefault();
}
如果您只想使用一种功能 "be fancy" 或使其成为 "simpler",请不要这样做。重用很重要(就像我上面所做的那样)但是无缘无故地让它变得非常复杂只会让代码变得糟糕。花哨的 - 保持简单,维护和查找错误会更容易。
看来你已经有2个方法了。获得疾病列表的
public List GetDisease()
和一个通过guid得到单一疾病的
public Model.Disease GetDiseaseById(Guid DiseaseId)
考虑到您询问是否可以对单一疾病和疾病列表重复使用 BuildreimbursementDisplay(IEnumerable displayList),并且您对它的工作方式感到满意 - 是的,您可以:
var disease = GetDiseaseById([disease_guid]);
string result = BuildreimbursementDisplay(new List<Model.Disease>().Add(disease));
这实际上会将单一疾病转换为只有一个成员的列表。不理想,但我可以假设 BuildreimbursementDisplay 会做这样的事情:
string BuildreimbursementDisplay(List<Model.Disease> diseases)
{
string foo ="";
foreach (var disease in diseases)
{
foo += <...>;
}
return foo;
}
所以它只会循环一次。
注意:您需要针对疾病 == 空情况进行检查。
我有一个具有 IEnumerable 的函数,它将循环构建一个字符串的记录列表。当我 return 只有一个对象时,我也想使用相同的功能。在中间层有两个函数,一个是 return 列表,另一个是 return 对象。
我是否必须构建一个新函数来接收该对象?
public List<Model.Disease> GetDisease()
{
var Disease = (from Diseases in db.Diseases
select new Model.Disease
{
DiseaseId = Diseases.DiseaseId,
DiseaseName = Diseases.DiseaseName,
drug = (from d in db.Drug
where (Diseases.DiseaseId == d.DiseaseId
select new drug
{
DrugId = d.drug,
DrugName = d.drugName
}).OrderBy(m => m.DrugName).ToList(),
}).OrderBy(d => d.DiseaseName).ToList();
return Disease;
}
}
public List<Model.Disease> GetDiseaseById(Guid DiseaseId)
{
var Disease = (from Diseases in db.Diseases
select new Model.Disease
{
DiseaseId = Diseases.DiseaseId,
DiseaseName = Diseases.DiseaseName,
drug = (from d in db.Drug
where (Diseases.DiseaseId == d.DiseaseId && d.DrugId ==
1)
select new drug
{
DrugId = d.drug,
DrugName = d.drugName
}).OrderBy(m => m.DrugName).ToList(),
}).OrderBy(d => d.DiseaseName).ToList().FirstOrDefault();
return Disease;
}
}
private string BuildreimbursementDisplay(IEnumerable<ReimbursementDisease> displayList)
您应该能够很好地完成以下操作。
public Model.Disease GetFirstDisease()
{
return GetDisease().FirstOrDefault();
}
这样的东西也行
public Model.Disease GetDiseaseById(Guid DiseaseId)
{
return GetDisease().Where(x => x.DiseaseId == DiseaseId).FirstOrDefault();
}
如果您只想使用一种功能 "be fancy" 或使其成为 "simpler",请不要这样做。重用很重要(就像我上面所做的那样)但是无缘无故地让它变得非常复杂只会让代码变得糟糕。花哨的 - 保持简单,维护和查找错误会更容易。
看来你已经有2个方法了。获得疾病列表的
public List GetDisease()
和一个通过guid得到单一疾病的
public Model.Disease GetDiseaseById(Guid DiseaseId)
考虑到您询问是否可以对单一疾病和疾病列表重复使用 BuildreimbursementDisplay(IEnumerable displayList),并且您对它的工作方式感到满意 - 是的,您可以:
var disease = GetDiseaseById([disease_guid]);
string result = BuildreimbursementDisplay(new List<Model.Disease>().Add(disease));
这实际上会将单一疾病转换为只有一个成员的列表。不理想,但我可以假设 BuildreimbursementDisplay 会做这样的事情:
string BuildreimbursementDisplay(List<Model.Disease> diseases)
{
string foo ="";
foreach (var disease in diseases)
{
foo += <...>;
}
return foo;
}
所以它只会循环一次。
注意:您需要针对疾病 == 空情况进行检查。