时间: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 });
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