Lamda OrderBy之后再GroupBy,排序没有作用.

时间:2016年11月10日21:56:42 星期四

my code

 var query = HistroryColl.OrderByDescending(x => x.ChangeDateTime).GroupBy(x => x.UpdateId).Select(x => x.FirstOrDefault()).Join(CriteriaColl, a => a.UpdateId, b => b.ProfilesCriteriaId, (a, b) => new DistrubutionList()
                {
                    ProfilesCriteriaName = b.ProfilesCriteriaName,
                    Active = b.Active,
                    IsRestrictionCriteria = b.IsRestrictionCriteria,
                    ChangeDateTime = a.ChangeDateTime,
                    ProfilesCriteriaId = b.ProfilesCriteriaId,
                    ProfileId = b.ProfileId,
                    EDTUserId = b.EDTUserId


                }).Where(p => p.IsRestrictionCriteria == false && p.Active == true);


Q: 本来是以时间降序的,结果变成升序了.跟想要的效果相反,

原因:不知道,  这些写会把OrderByDescending() 不起作用

解决:1. 

排序后Tolist() 然后再来 Groupby

var CriteriaList = HistroryColl.OrderByDescending(x => x.AdminHistoryId).ToList();
                var query = CriteriaList.GroupBy(x => new { x.UpdateId }).Select(x => x.FirstOrDefault()).Join(CriteriaColl, a => a.UpdateId, b => b.ProfilesCriteriaId, (a, b) => new DistrubutionList()
                {
                    ProfilesCriteriaName = b.ProfilesCriteriaName,
                    Active = b.Active,
                    IsRestrictionCriteria = b.IsRestrictionCriteria,
                    ChangeDateTime = a.ChangeDateTime,
                    ProfilesCriteriaId = b.ProfilesCriteriaId,
                    ProfileId = b.ProfileId,
                    EDTUserId = b.EDTUserId


                }).Where(p => p.IsRestrictionCriteria == false && p.Active == true);


               
                var ConvertToQuery = query.AsQueryable();   //将转换为 IEnumerable 转换为  IQueryAble




参考
1.  http://bbs.csdn.net/topics/391835762?page=1


linq 分组取每组指定最新值(排除为null)对的记录?
表A
Number Plate Date
001 桂A 2015/9/20
002 桂A 2015/9/21
003 桂A 2015/9/25
004 桂B 2015/9/25
005 桂B 2015/9/29
006 桂C NULL
表A
Plate Owner
桂A 张三
桂B 李四
桂C 王五
要求:对表A以Plate进行分组,取Date最新值(排除为null)
查询的结果字段有Plate,Date, Owner
结果为:
Plate Date Owner
桂A 2015/9/25 张三
桂B 2015/9/29 李四
--cut--
from a in A
group a by a.Plate into g
from b in B
where g.Key ==b.Plate
select new {b.Plate,Date=g.Max(x=>x.Date),b.Owner}
--cut--
var query = A表.Where(p => p.Date != null).OrderByDescending(p => p.Date).GroupBy(p => p.Plate).Select(p => p.First()).Join(B表, a => a.Plate, b => b.Plate, (a, b) => new { a.Plate, b.Owner, a.Date });
--cut--
那就换一下
var query = A表.Where(p => p.Date != null).OrderByDescending(p => p.Date).GroupBy(p => p.Plate).Select(p => p.FirstOrDefault()).Join(B表, a => a.Plate, b => b.Plate, (a, b) => new { a.Plate, b.Owner, a.Date });

2. http://www.myexception.cn/linq/1338649.html

OrderBy之后再GroupBy导致被重新排序的有关问题

var list = db.t_News.OrderByDescending(q => q.ID).ToList();
var query = list.Take(400).GroupBy(q => q.Tags);
将OrderBy的结果固定下来。


3. https://social.msdn.microsoft.com/Forums/en-US/64fc5db3-38d7-41d3-8510-2df9eae2081a/convert-from-ienumerable-to-iqueryable?forum=linqprojectgeneral

Convert from IEnumerable to IQueryable

.AsQueryable() on an IEnumerable<T> sequence and it will return IQueryable<T>.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值