使用 C# 、 LINQ 排序

Sorting using C# , LINQ

我在 SharePoint 中有一个项目列表,其中包含标题、日期和优先级。我想在显示它时在我的客户端应用程序上对此 collection 进行排序,排序需要首先按日期降序排列,然后在一组 object 的日期中排序,它应该排序 object s 按优先级。

我正在使用下面的 LINQ 代码,它没有提供预期的结果。表示以下代码不按优先级排序 object 在日期中。

 var results = spObjects.OrderByDescending(n => n.Date).ThenBy(t => t.Priority);

未排序collection如下

已排序 Collection - 预期

我正在使用 SharePoint CAML 查询,因为我从 SP 中获取这些 object 并且我发现在 CAML 中很难做到这一点,但我认为这可以在 C# 端使用 LINQ 来完成,不是吗?有人可以帮忙吗?

如果我对你的理解是正确的,你想在日期标题下嵌套 collection,你可以这样做...

 var results = from so in spObjects
               orderby so.Date descending
               select new {
                    Date = so.Date,
                    Items = (from so2 in spObjects
                             where so2.Date == so.Date
                             orderby so2.Priority
                             select new {
                                  so2.Title,
                                  so2.Priority
                             })
                    };

我敢打赌 n.Date 是一个 DateTime 对象,有小时、分钟和秒。您的 Linq 看起来不错,因此您可能有不同的时间导致当天晚些时候优先级较低的项目在当天早些时候的项目之前排序。

试试这样的东西:

 var results = spObjects.OrderByDescending(n => new DateTime(n.Date.Year, n.Date.Month, n.Date.Day)).ThenBy(t => t.Priority);