我有一个自定义对象的IQueryable,它包含多个属性,但是,只有ID应该与此相关。我创建了一个方法,它提供了一个基于其他属性的ID列表,告诉我如何对IQueryable对象进行排序。
然后我试着这样命令它:query = query.OrderBy(q => sortedList.IndexOf(q.ID));
但是,如果我尝试在IQueryable上执行其他操作,例如执行.ToList()
或获取一页数据,我会遇到InvalidOperationException,说LINQ查询无法转换。
我期望IQueryable对象被正确排序/排序。
1条答案
按热度按时间9gm1akwq1#
使用Entity Framework时,OrderBy表达式被转换为SQL查询(或等效查询,具体取决于数据库提供程序),以便可以在数据库服务器上执行。这发生在枚举查询时,在您的情况下,当您调用ToList时。
Entity Framework无法将函数sortListed.IndexOf转换为SQL语句,因为数据库没有已排序列表的副本(已存在于内存中),这就是您看到错误的原因。EF只能翻译相对简单的表达。
您需要尝试找到另一种方式来对查询进行排序,但要得到您想要的结果将取决于sortedList的排序方式。
希望这能为你指明正确的方向。
更新...
要根据不同的属性对IQueryable进行排序,具体取决于每个项上名为Flag的属性,您可以这样做: