-2

我想按日期时间对两个模型进行排序,它们都进入一个时间线,因此我需要它们中的最新模型位于列表时间轴的开头,我找到了联合模型之类的解决方案,但我希望它们保留两个单独的列表。 。是否可以?

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
}

现在我希望将时间线结果列在第二个列表中,因为它是较早的结果

4

2 回答 2

0

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

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

请注意,这只有在两个列表类型相同时才有可能。其他注意,这将返回一个 IEnumerable,而不是一个新的 List,因此每次枚举它时,都会计算合并。如果你想创建一个新的 List 来防止这种情况,你必须在最后调用 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; }
    }

}
于 2019-09-19T17:22:54.787 回答
0

感谢您的帮助,我发现该问题最有用的解决方案是:- 通过在上传内容上运行的 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);
于 2019-09-21T17:51:40.020 回答