如何维护实体的排序顺序

时间:2014-07-23 07:27:19

标签: c# asp.net

我有一个实体AllComponentEntity,其中包含AllergyVitalList等其他实体的属性。每个实体都有一个名为SortngOrder的{​​{1}}字段}}。如果intAllergy,那么我会先处理它,依此类推。

如何根据SortingOrder == 1字段对AllComponentEntity中的所有网友进行排序,以便我可以相应地对待它们?

以下是我的AllCompnentEntity

SortingOrder

以下是过敏成分实体

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

以下是VitalComponentEntity组件实体

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

1 个答案:

答案 0 :(得分:0)

我认为最好的解决方案是让所有实体(如Allergy,VitalList等)实现与 SortingOrder如下:

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