首页 新闻 搜索 专区 学院

linq 问题 路过的大侠帮忙看下吧 特别是星哥啊!

0
悬赏园豆:10 [已解决问题] 解决于 2014-06-26 08:46
 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排序 但是又不能对她分组 

s_p的主页 s_p | 菜鸟二级 | 园豆:226
提问于:2014-06-25 13:51
< >
分享
最佳答案
0

需要先确定下,你是对当前这个语句的结果排序,还是先排序出结果。
如果是对结果排序,直接对整个对象OrderBy即可。

收获园豆:8
幻天芒 | 高人七级 |园豆:36912 | 2014-06-25 16:22

 我这个结果是 对设备ID分组  然后对她一天内的时间排序

然后 string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))) 显示 对这个结果 做差值相加 

就是  1 2  3  4 => (2-1)+(3-2)+(4-3)

当然这里的是时间

s_p | 园豆:226 (菜鸟二级) | 2014-06-25 16:38

排序后对结果 处理 是这样的

s_p | 园豆:226 (菜鸟二级) | 2014-06-25 16:42

@s_p: 那就对结果OrderBy(x=>x.dyn_vehid).ThenBy(x=>x.dyn_Time)

幻天芒 | 园豆:36912 (高人七级) | 2014-06-25 16:56

@幻天芒:  但是我这个就要写在下面啊  dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),

s_p | 园豆:226 (菜鸟二级) | 2014-06-25 16:57

@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 | 园豆:226 (菜鸟二级) | 2014-06-25 16:59

@s_p: 直接dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),在这句上排序就行了。

幻天芒 | 园豆:36912 (高人七级) | 2014-06-25 19:53

@幻天芒: 对啊 还是你懂我   嗯 我明天优化下 做饭去了 星哥 ^*^

s_p | 园豆:226 (菜鸟二级) | 2014-06-25 19:56

@s_p: 额...

幻天芒 | 园豆:36912 (高人七级) | 2014-06-25 19:59
其他回答(2)
0

多套一层,先排好序,然后再在这个基础上分组,应该就可以达到你的效果,LINQ我不熟,只提供一下思路。

收获园豆:1
Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-06-25 13:59
0

直接在select 后面的结果里面对他进行排序啊,。

收获园豆:1
不知道风往哪儿吹 | 园豆:2001 (老鸟四级) | 2014-06-25 16:31

不对我这是排序好后 出结果 有要求的 你看这一句

dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("dyn_Time"))),

支持(0) 反对(0) s_p | 园豆:226 (菜鸟二级) | 2014-06-25 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册