IQueryable.OrderBy 无法在 EF Core 中使用 IComparer
IQueryable.OrderBy is not working with IComparer in EF Core
我们在 IQueryable 接口中有一个方法的签名:
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, IComparer<TKey> comparer);
我正在尝试像这样实现此调用
var result = await DbSet.OrderBy(e => e.Type, new EntityTypeComparer()).ToListAsync();
但它抛出异常“无法翻译 LINQ 表达式”。
您能否与 EF Core 分享 IComparer 的任何工作示例?或者我如何在 EF Core 中为 int 属性 实现自定义排序逻辑?
P.S。 Microsoft docs says 不支持 IComparer。但是我们需要 IQueryable.OrderBy 和 IComparer 参数做什么?
这里已经对这个案例进行了解释Is it possible to use IComparable to compare entities in Entity Framework?
简短的回答是否定的,你不能那样做。
EF 要求所有操作都能够 100% 执行 server-side。支持 IComparable 或 IEquatable 需要 EF 能够将任意 IL 转换为 SQL,但它目前还不能做到。
我们在 IQueryable 接口中有一个方法的签名:
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, IComparer<TKey> comparer);
我正在尝试像这样实现此调用
var result = await DbSet.OrderBy(e => e.Type, new EntityTypeComparer()).ToListAsync();
但它抛出异常“无法翻译 LINQ 表达式”。
您能否与 EF Core 分享 IComparer 的任何工作示例?或者我如何在 EF Core 中为 int 属性 实现自定义排序逻辑?
P.S。 Microsoft docs says 不支持 IComparer。但是我们需要 IQueryable.OrderBy 和 IComparer 参数做什么?
这里已经对这个案例进行了解释Is it possible to use IComparable to compare entities in Entity Framework?
简短的回答是否定的,你不能那样做。
EF 要求所有操作都能够 100% 执行 server-side。支持 IComparable 或 IEquatable 需要 EF 能够将任意 IL 转换为 SQL,但它目前还不能做到。