C# 比较razor上的两个列表,并按最新列表对它们进行排序(两者都创建了datetime)

C# 比较razor上的两个列表,并按最新列表对它们进行排序(两者都创建了datetime),c#,razor,asp-net-mvc-1,C#,Razor,Asp Net Mvc 1,我想按Datetime对两个模型进行排序,两个模型都指向一个时间轴,所以我需要它们中最新的一个位于列表时间轴的开头,我找到了类似Union模型的解决方案,但我希望它们保持两个单独的列表。可能吗 foreach (var list1 in model.list1.OrderByDescending(a => a.created_datetime)) { 09/18/19 } foreach (var list2 in model.list2.OrderByDescending(a

我想按Datetime对两个模型进行排序,两个模型都指向一个时间轴,所以我需要它们中最新的一个位于列表时间轴的开头,我找到了类似Union模型的解决方案,但我希望它们保持两个单独的列表。可能吗

foreach (var list1 in model.list1.OrderByDescending(a => a.created_datetime))
{
    09/18/19
}

foreach (var list2 in model.list2.OrderByDescending(a => a.created_datetime))
{
    09/19/19
}
现在我希望时间线结果列在第二个列表中,因为它是较早的结果

这就是您的意思?(使用Linq)

请注意,只有当两个列表的类型相同时,才可能这样做。 另请注意,这将返回一个IEnumerable,而不是一个新列表,因此每次枚举它时,都将计算合并。如果要创建一个新列表以防止出现这种情况,必须在末尾调用ToList(),但如果列表较大,则性能可能会非常不理想

示例程序:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Lists
{
    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new List<DateItem>
            {
                new DateItem{Date = DateTime.UtcNow.AddDays(-2), Name = "The day before yesterday" },
                new DateItem{Date = DateTime.UtcNow.AddDays(1), Name = "Tomorrow" }
            };

            var list2 = new List<DateItem>
            {
                new DateItem{Date = DateTime.UtcNow.AddDays(2), Name = "The day after tomorrow" },
                new DateItem{Date = DateTime.UtcNow.AddDays(-1), Name = "Yesterday" },
                new DateItem{Date = DateTime.UtcNow, Name = "Today" }
        };

            var merged = list1.Union(list2).OrderByDescending(d => d.Date);

            foreach (var day in merged)
            {
                Console.WriteLine(day.Name);
            }
        }
    }

    class DateItem
    {
        public DateTime Date { get; set; }
        public string Name { get; set; }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间列表
{
班级计划
{
静态void Main(字符串[]参数)
{
var list1=新列表
{
new DateItem{Date=DateTime.UtcNow.AddDays(-2),Name=“前天”},
新的DateItem{Date=DateTime.UtcNow.AddDays(1),Name=“明天”}
};
var list2=新列表
{
新的DateItem{Date=DateTime.UtcNow.AddDays(2),Name=“后天”},
新的DateItem{Date=DateTime.UtcNow.AddDays(-1),Name=“昨天”},
新建DateItem{Date=DateTime.UtcNow,Name=“Today”}
};
var merged=list1.Union(list2.OrderByDescending)(d=>d.Date);
foreach(合并中的var日)
{
Console.WriteLine(日期、名称);
}
}
}
类日期项
{
公共日期时间日期{get;set;}
公共字符串名称{get;set;}
}
}

谢谢你的帮助,我发现解决这个问题最有帮助的方法是:-通过在上传内容上运行的JS函数对列表进行排序

代码如下:

var item = $(".sort-item").sort(function (a, b) {
                var Adate = $(a).attr("data-date");
                var Bdate = $(b).attr("data-date");
                var Atime = $(a).attr("data-time");
                var Btime = $(b).attr("data-time");
                if (Adate < Bdate) return 1;
                if (Adate > Bdate) return -1;
                if (Atime < Btime) return 1;
                if (Atime > Btime) return -1;
                return 0;
           });
           $(".timeline").prepend(item);
var item=$(“.sort item”).sort(函数(a,b){
var Adate=$(a).attr(“数据日期”);
var Bdate=$(b).attr(“数据日期”);
var Atime=$(a).attr(“数据时间”);
var Btime=$(b).attr(“数据时间”);
if(AdateBdate)返回-1;
if(AtimeBtime)返回-1;
返回0;
});
$(“.timeline”)。预结束(项目);

我不清楚你在问什么。您正在寻找
.OrderBy()
扩展方法来对您的收藏进行排序吗?感谢您的回复,我想按日期时间对它们进行排序,假设第一个列表的日期是昨天,第二个列表的日期是今天,那么将显示第二条记录first@DanielC如何将列表分开并混合在一起?我不清楚你是什么asking@DanielC:也许您可以包括一个更完整的示例,包括数据和预期输出?现在还不清楚如何将列表分开,但如何将它们排序在一起。感谢您的回答,这就是我正在试图找出的方法,是有办法对类似的内容进行条件化处理还是将它们合并起来?
“但我希望它们保持两个单独的列表”
Union不会将第二个IEnumerable合并到第一个IEnumerable中,但是产生了两个IEnumerable的内容
var item = $(".sort-item").sort(function (a, b) {
                var Adate = $(a).attr("data-date");
                var Bdate = $(b).attr("data-date");
                var Atime = $(a).attr("data-time");
                var Btime = $(b).attr("data-time");
                if (Adate < Bdate) return 1;
                if (Adate > Bdate) return -1;
                if (Atime < Btime) return 1;
                if (Atime > Btime) return -1;
                return 0;
           });
           $(".timeline").prepend(item);