jwd*_*jwd 5 linq linq-to-entities
我有LINQ查询,它是以零碎的方式构建的,如下所示:
var initialQuery = from item in MyContext where xxx == yyy select item;
var furtherQuery = from item in initialQuery where bla == foo select new { some stuff };
// more code here...
// eventually:
var yetAnotherQuery = (from item in furtherQuery ...)
.OrderBy(my_condition);
// As far as I know, the following query should still maintain the order of the previous one
// see: https://stackoverflow.com/questions/911942/are-subqueries-in-linqtosql-guaranteed-to-be-in-the-same-order-as-their-parent
var stillAnotherQuery = (from item in yetAnotherQuery
select item.data_I_care_about)
.Distinct();
// And finally...
var finalQuery = stillAnotherQuery.Skip(PageIndex).Take(PageSize);
Run Code Online (Sandbox Code Playgroud)
但是我在Skip()调用时遇到异常,说查询没有被命令!显然,我在上面的代码注释中指出的内容和引用的SO问题并不完全正确.实际上,另一个SO答案表明不保证该订单的保存.
有谁知道做我想要完成的事情的好方法?
我考虑ROW_NUMBER在我的中间结果中简单地包含一个,并在最后按顺序排序,但我找不到ROW_NUMBER通过LINQ在我的结果中得到它的方法.
我见过几个其他 SO 问题,试图让ROW_NUMBER在那里,但他们都是客户方,据我所看到的.
我好像把自己画在了角落里.有人知道(LINQ友好)出路吗?
有人建议我在Distinct()之前做OrderBy().我相信这会给我不同的结果.
想象一下,我有这个数据表
myRank | myData
-------+--------
3 | A
1 | B
2 | A
Run Code Online (Sandbox Code Playgroud)
假设我订购了myRank,我关心的数据是myData,并想象我的原始代码是这样的:
var query = from item in MyTable
select item;
query = query.OrderBy(item => item.myRank);
var derivedQuery = from item in query // Note: we throw away myRank
select item.myData;
derivedQuery = derivedQuery.Distinct();
Run Code Online (Sandbox Code Playgroud)
如果我交换了OrderBy()和的顺序Distinct(),我会得到不同的结果.我不想myRank被列入Distinct().
对不起,这是一个更大的过程的一部分,因此很难将所有细节都纳入这个问题.
但希望这有道理吗?
问题不在于元素不再排序。
相反,问题在于 Distinct() 返回 aIQueryable<T>而 OrderBy() 返回IOrderedQueryable<TSource>,这(显然)是分页与 EF 配合使用所必需的
交换 Distinct() 和 OrderBy() 步骤应该可以解决问题
编辑
我建议大致是这样的:
var query = from item in MyTable
select item;
query = query.GroupBy(item => item.myData, item => item.myRank);
var derivedQuery = query.OrderBy(group => group.Min())
.Select(group.Key);
Run Code Online (Sandbox Code Playgroud)
澄清:
myRank将产生与首先按 myRank 全局排序(升序)相同的顺序,然后执行 Distinc()| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |