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;
}

所以它只会循环一次。

注意:您需要针对疾病 == 空情况进行检查。