IQueryable.OrderBy在EF Core中无法与IComparer一起使用。

8 浏览
0 Comments

IQueryable.OrderBy在EF Core中无法与IComparer一起使用。

我们在IQueryable接口中有一个方法的签名:

public static IOrderedQueryable OrderBy(this IQueryable source, Expression> keySelector, IComparer comparer);

我尝试实现这个调用,如下所示:

var result = await DbSet.OrderBy(e => e.Type, new EntityTypeComparer()).ToListAsync();

但它抛出异常"无法转换LINQ表达式"。

你能分享一些在EF Core中使用IComparer的示例吗?或者我如何实现自定义的整数属性排序逻辑在EF Core中?

P.S. Microsoft文档说不支持IComparer。但我们为什么需要带有IComparer参数的IQueryable.OrderBy呢?

0
0 Comments

IQueryable.OrderBy在EF Core中不能与IComparer一起使用的原因是,EF Core要求所有操作都能够在服务器端完全执行。支持IComparable或IEquatable需要EF能够将任意的IL代码转换为SQL,但目前EF还不能实现这一点。

这个问题的解决方法目前还没有,但可以期待将来的版本中可能会支持这种功能。虽然技术上可以在T-SQL中实现一个IL解释器,但性能会非常低下。

详情请参考:Is it possible to use IComparable to compare entities in Entity Framework?

0