请问两个list数组的比较以及排序

caicoko 2015-10-28 04:05:37
List<dynamic> list1 = new List<dynamic>();
list1.Add(new { id = "1", num = 11, time = "2015-10-10 10:10:10" });
list1.Add(new { id = "2", num = 22, time = "2015-10-10 11:11:11" });
list1.Add(new { id = "3", num = 33, time = "2015-10-10 12:12:12" });
List<dynamic> list2 = new List<dynamic>();
list2.Add(new { id = "11", num = 18, time = "2015-10-10 10:10:10" });
list2.Add(new { id = "21", num = 10, time = "2015-10-10 11:11:11" });
list2.Add(new { id = "3", num = 55, time = "2015-10-10 12:12:12" });

有上面2个数组,以两个数组的时间相等,判断出2个num值偏差比较大的那条数据,如上列2列要返回 list1.Add(new { id = "3", num = 33, time = "2015-10-10 12:12:12" });


linq的方法如何实现,或者有其他更好的方法也可以。
...全文
237 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2015-10-29
  • 打赏
  • 举报
回复
这是不是个BUG? 40分的帖子结出了45分。。。。
ajianchina 2015-10-28
  • 打赏
  • 举报
回复
上面代码中的LastOrDefault换成Last 或者这样子吧,也一样

var query = list1.Join(list2, a => a.time, b => b.time, (a, b) => new
{
	x = Math.Abs(a.num - b.num),
	a
}).OrderBy(p => p.x).LastOrDefault();

if (query != null) Console.WriteLine(query.a);
ajianchina 2015-10-28
  • 打赏
  • 举报
回复
随楼主挑一个吧

var query = list1.Join(list2, a => a.time, b => b.time, (a, b) => new
{
	x = Math.Abs(a.num - b.num),
	a
}).OrderBy(p => p.x);

if (query.Any()) Console.WriteLine(query.LastOrDefault().a);
q107770540 2015-10-28
  • 打赏
  • 举报
回复
  list1.Add(new { id = "1", num = 11, time = "2015-10-10 10:10:10" });
            list1.Add(new { id = "2", num = 22, time = "2015-10-10 11:11:11" });
            list1.Add(new { id = "3", num = 33, time = "2015-10-10 12:12:12" });

            List<dynamic> list2 = new List<dynamic>();
            list2.Add(new { id = "11", num = 18, time = "2015-10-10 10:10:10" });
            list2.Add(new { id = "21", num = 10, time = "2015-10-10 11:11:11" });
            list2.Add(new { id = "3", num = 55, time = "2015-10-10 12:12:12" });

            var query = from x in list1
                        join y in list2 on x.time equals y.time
                        orderby y.num - x.num descending
                        select y;

            if(query.Any())
                Console.WriteLine(query.First().id);

            Console.ReadKey();
  • 打赏
  • 举报
回复
List<dynamic> list1 = new List<dynamic>();
list1.Add(new { id = "1", num = 11, time = "2015-10-10 10:10:10" });
list1.Add(new { id = "2", num = 22, time = "2015-10-10 11:11:11" });
list1.Add(new { id = "3", num = 33, time = "2015-10-10 12:12:12" });
List<dynamic> list2 = new List<dynamic>();
list2.Add(new { id = "11", num = 18, time = "2015-10-10 10:10:10" });
list2.Add(new { id = "21", num = 10, time = "2015-10-10 11:11:11" });
list2.Add(new { id = "3", num = 55, time = "2015-10-10 12:12:12" });

var query = (from l1 in list1
                join l2 in list2 on l1.time equals l2.time
                orderby Math.Abs(l1.num - l2.num) descending
                select l1).First();
Console.WriteLine(query.id + " " + query.num);

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧