【问题标题】:Sorting using C# , LINQ使用 C# 、 LINQ 进行排序
【发布时间】:2018-07-26 20:17:49
【问题描述】:

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

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

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

未排序的集合如下

排序后的集合 - 期望

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

【问题讨论】:

标签: c# linq sorting sharepoint caml


【解决方案1】:

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

尝试类似:

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

【讨论】:

    【解决方案2】:

    如果我理解正确,您希望在日期标题下有一个嵌套集合,您可以这样做...

     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
                                 })
                        };
    

    【讨论】:

    • 感谢回复,我试过了,不行。一旦它按日期降序排序,然后在该日期内,我需要按优先级升序排序。
    • 子句“orderby so2.Priority”的目的是专门为嵌套查询中的优先级提供升序排序。
    • 是的,检查过,但不幸的是它不适合我。对我来说 Priority 是一个具有 {Urgent=1, Regualar =2 } 的枚举。但我不认为这有什么不同,是吗?
    • 不,这没关系,因为枚举在数据库中表示为 int。你能真正检查数据库并确保优先级设置正确吗?也许您在显示枚举的代码上有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2021-06-30
    • 2012-01-28
    • 2010-12-31
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多