如何维护实体的排序顺序

本文关键字:实体 排序 顺序 维护 何维护 | 更新日期: 2023-09-27 18:14:12

我有一个实体AllComponentEntity,它具有其他实体如Allergy, VitalList等的属性。这些实体中的每一个都有一个名为SortngOrder的字段,类型为int。如果AllergySortingOrder == 1,那么我将首先处理它,依此类推。

我如何按SortingOrder字段对AllComponentEntity中的所有实体进行排序,以便我可以相应地对待它们?

下面是我的allcomponententity

   public AllergyComponentEntity Allergy { get; set; }
   public List<VitalComponentEntity> VitalList { get; set; }

以下是过敏成分实体

   public string AllergyName{ get; set; }
   public int SortOrder { get; set; }

下面是VitalComponentEntity组件Entity

   public bool VitalTemp{  get;set;}
   public bool VitalResp {  get; set; }
   public bool VitalPulse{get;set;}
   public int SortOrder { get; set; }

如何维护实体的排序顺序

我认为最好的解决方案是让你所有的实体(如Allergy, VitalList等)实现一个接口SortingOrder like so:

interface ISortable
{
    int SortingOrder { get; }
}

然后让AllComponentEntity创建如下方法:

public IEnumerable<ISortable> GetProperties()
{
    yield return Allergy;
    foreach(var vce in VitalList)
        yield return vce;
}

您将能够使用

进行排序
AllComponentEntity.GetProperties().OrderBy(x=>x.SortOrder);

要使用AllComponentEntity枚举所有属性,那么你必须让它实现IEnumerable接口。这将允许你直接使用AllComponentEntity进行迭代。

完整源代码如下所示:

interface ISortable
{
    int SordOrder { get; }
}
class AllergyComponentEntity : ISortable
{
    public string AllergyName { get; set; }
    public int SortOrder { get; set; }
}
class VitalComponentEntity : ISortable
{
    public bool VitalTemp { get; set; }
    public bool VitalResp { get; set; }
    public bool VitalPulse { get; set; }
    public int SortOrder { get; set; }
}
class AllComponentEntity : IEnumerable<ISortable>
{
    public AllergyComponentEntity Allergy { get; set; }
    public List<VitalComponentEntity> VitalList { get; set; }
    public IEnumerable<ISortable> GetProperties()
    {
        yield return Allergy;
        foreach (var vce in VitalList)
            yield return vce;
    }
    private IEnumerable<ISortable> GetSorted()
    {
        return GetProperties().OrderBy(x => x.SordOrder);
    }
    public IEnumerator<ISortable> GetEnumerator()
    {
        return GetSorted().GetEnumerator();
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetSorted().GetEnumerator();
    }
}

然后像下面这样调用AllComponentEntity:

    AllComponentEntity ace = new AllComponentEntity();
    foreach (ISortable sortable in ace)
        DoSomething(ace);