【发布时间】:2019-02-04 23:44:19
【问题描述】:
我必须进行多部分排序并希望动态进行。
我发现了这个问题,但不知道如何在 dbquery 语句中使用 func。
No generic method 'ThenBy' on type 'System.Linq.Queryable'
如果我能让线程中的代码工作,那将是必杀技。
我看到的所有示例都在where 语句中使用then,但我需要使用该函数进行排序。
我使用 IQueryable 编写了扩展,包括用于 orderby 和 orderbydescending 的扩展。问题是thenby 和thenbydescending 使用iorderedqueryable。
我在使用 ThenByProperty 时遇到的错误是
“System.Data.Entity.Infrastructure.DbQuery1[ORMModel.v_Brand]' cannot be converted to type 'System.Linq.IOrderedEnumerable1[ORMModel.v_Brand]”类型的对象。
当我使用类似的 OrderByProperty 扩展时,不会出现这样的错误。
真是一团糟,显然我不经常在这里发帖。无论如何,我很困惑而且一无所知,所以非常感谢任何提示。
试图发布代码,但不断收到格式错误,所以放弃了。但无论如何都要帮助我:)
【问题讨论】:
-
我认为这是正确的行为,你不能在没有
OrderBy的情况下使用ThenBy=>dataset.OrderBy().ThenBy() -
我不会在服务器端进行多重排序,而是从服务器获取结果,然后在本地进行排序:
dbContext.Items.Where(item => item.ID < 20).AsEnumerable().OrderBy(item => item.LastName).ThenBy(item => item.FirstName)。数据库最大的性能损失是仅过滤掉当前相关的数据。如果这已经在服务器端完成,那么在客户端排序就很容易了。 -
Kien Chu 你是对的,但我不知道如何在 dbquery 语句中包含 func。例如,我编写的返回 IQueryable
的方法可以像原生 linq 扩展一样使用。在这种情况下,我可以编写 var output = _db.MyTable.MultiSort("field1,field2:desc").ToArray(); -
实验我试过这个,q = q.OrderBy(x => MultipleSorts
(sortBy));并收到此错误,LINQ to Entities 无法识别方法 'System.Func 2[System.Linq.IQueryable1[ORMModel.v_Brand],System.Linq.IOrderedQueryable`1[ORMModel.v_Brand]] MultipleSorts[v_Brand](System.String)'方法,并且该方法不能翻译成商店表达式。 -
以防万一其他人来寻找多级排序,我发现此代码更易于使用。 aonnull.blogspot.com/2010/08/…