簡體   English   中英

EF 核心將默認 OrderBy 設置為父實體中的 List 屬性

[英]EF core set default OrderBy to a List property in the parent entity

我需要一個屬性或流暢的方法來將默認 OrderBy 設置為屬性,以避免每次使用 Include 時都必須添加 OrderBy 子句。

public class ItemsGroup : BaseEntity
    {
        public virtual List<ItemDefinition> ItemDefinitions { get; set; }
        ...
    }
public class ItemDefinition: BaseEntity
    {
        ...
        public int Position { get; set; }
    }

我想添加這樣的屬性

[DefaultOrderBy(nameof(ItemDefinition.Position), Sorting.Asc)]
public virtual List<ItemDefinition> ItemDefinitions { get; set; }

或類似的東西:

modelBuilder.Entity<ItemsGroup>().Property(ig => ig.ItemDefinitions).DefaultOrderBy(id => id.Position, Sorting.Asc);

對於帶有攔截器和訪問者的 EF,我看到了一些有趣的解決方法,但我無法使用 EF 核心重現它。

有沒有辦法用 EF 核心做類似的事情?

我不知道您可以直接執行此操作。

也許是一種擴展方法:

public static IList<ItemDefinition> SortedByPosition(this IList<ItemDefinition> list)
{
    return list.OrderBy(i => i.Position);
}

利用:

foreach (var ItemDefinition in myDefinitionList.SortedByPosition())
{
    // use itemDefinition
}

或者,如果您希望它們在源頭進行排序,以下應該可以工作:

public class ItemsGroup
{
    [NotMapped]
    private IList<ItemDefinitions> _itemDefinitions;

    public IList<ItemDefinitions> ItemDefinitions
    {
        get => _itemDefinitions;
        set
        {
            _itemDefinitions = value.OrderBy(i => i.Position);
        }
    }
}

然后他們從get go中排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM