[英]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.