from item in dt.AsEnumerable().AsParallel() group item by new { dyn_vehid = item.Field<int>("dyn_vehid"), groupTime = item.Field<DateTime>("groupTime") } into m where m.Count() > 1 orderby m.Key.dyn_vehid descending, m.Key.groupTime ascending select new { dyn_vehid = m.Key.dyn_vehid, v_no = m.First().Field<string>("v_no"), C_EnterpriseName = m.First().Field<string>("C_EnterpriseName"), dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))), V_LicenseColor = m.First().Field<string>("V_LicenseColor"), groupTime = m.Key.groupTime };
我希望orderby的是 是对 dyn_Time排序 但是又不能对她分组
需要先确定下,你是对当前这个语句的结果排序,还是先排序出结果。
如果是对结果排序,直接对整个对象OrderBy即可。
我这个结果是 对设备ID分组 然后对她一天内的时间排序
然后 string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))) 显示 对这个结果 做差值相加
就是 1 2 3 4 => (2-1)+(3-2)+(4-3)
当然这里的是时间
排序后对结果 处理 是这样的
@s_p: 那就对结果OrderBy(x=>x.dyn_vehid).ThenBy(x=>x.dyn_Time)
@幻天芒: 但是我这个就要写在下面啊 dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),
@s_p: 这次就是你上次帮我看的那个时间每次查询有bug的问题 我后面是这样写的
select new { dyn_vehid = m.Key.dyn_vehid, v_no = m.First().Field<string>("v_no"), C_EnterpriseName = m.First().Field<string>("C_EnterpriseName"), dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))), V_LicenseColor = m.First().Field<string>("V_LicenseColor"), groupTime = m.Key.groupTime }; var obcVhicle = new List<ClsVehicle>(); int sumSecond = 0; List<DateTime> tempTimeSort = null; foreach (var item in dataList) { tempTimeSort = new List<DateTime>(); var tempTimes = item.dyn_Time.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries); for (int k = 0; k < tempTimes.Length; k++) { tempTimeSort.Add(DateTime.Parse(tempTimes[k])); } tempTimeSort.Sort(); for (int w = 0; w < tempTimeSort.Count - 1; w++) { var secondTemp = "".TimeSeconds(tempTimeSort[w].ToString(), tempTimeSort[w + 1].ToString());
临时申明了一个list 把结果添加进去在排序 这样会增加额外的开销 所以想优化
@s_p: 直接dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),在这句上排序就行了。
@幻天芒: 对啊 还是你懂我 嗯 我明天优化下 做饭去了 星哥 ^*^
@s_p: 额...
多套一层,先排好序,然后再在这个基础上分组,应该就可以达到你的效果,LINQ我不熟,只提供一下思路。
直接在select 后面的结果里面对他进行排序啊,。
不对我这是排序好后 出结果 有要求的 你看这一句
dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),