比较 razor 上的两个列表并按最新对它们进行排序(两者都创建了日期时间)



我想按日期时间对两个模型进行排序,它们都进入一个时间线,所以我需要它们中最新的出现在列表时间轴的开头,我找到了像联合模型这样的解决方案,但我希望它们保持两个单独的列表。可能吗?

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(

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

请注意,仅当两个列表的类型相同时,才可以执行此操作。 另请注意,这将返回一个 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; }
}
}

感谢您的帮助,我发现对该问题最有用的解决方案是:- 按在上传内容上运行的 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);

相关内容

最新更新