我需要对多个值进行排序。数据来自MongoDb数据库,我从C#加载它。
示例
Unsorted
OwnerId Status Date
123 New 2016-01-01
456 New 2016-01-01
789 New 2016-01-06
123 New 2016-01-05
456 Qualified 2016-01-05
789 Converted 2016-01-01
123 Qualified 2016-01-02
Expected
OwnerId Status Date
123 New 2016-01-05
123 New 2016-01-01
123 Qualified 2016-01-02
789 New 2016-01-06
456 New 2016-01-01
456 Qualified 2016-01-05
789 Converted 2016-01-01我需要先显示OwnerId 456,然后显示New状态,然后显示日期下降。
OwnerId是一个动态值:它是我的应用程序中当前通过身份验证的用户。我不能从任何地方访问这个值。OwnerId值类型在实际情况下是GUID。
我尝试过,但没有成功:c#如何按其值列对排序列表进行排序1
我希望我的问题是可以理解的。不要犹豫,问更多的细节。提前谢谢。
编辑:
我不能直接用芒果来达到这个目的。我需要一个C#解决方案。
发布于 2016-07-22 09:28:37
可以使用以下查询进行排序:
db.<people>.sort( { OwnerId : 0, Date : 1 })您需要使用C#客户端在MongoDB中翻译此查询吗?
发布于 2016-07-22 10:51:06
尝试这个查询,它可以帮助您获得您想要的结果:-
db.collName.find({findQuery}).sort({ 'OwnerId' : 1, 'Status':1, 'Date' : -1 })查询将首先按OwnerId的升序对记录进行排序。然后根据status的值进行排序,最后按Date字段的降序排序。
现在,您应该通过所有排序获得您想要的结果。
有关如何以各种方式使用它的更多信息,请参见排序-示例。请参见最后一个类似于您的需求的示例。
希望这能帮到你。
注意:-如果有很多记录,也可以在查询中使用.limit() 。见https://docs.mongodb.com/manual/reference/method/cursor.sort/#limit-results.
发布于 2016-07-23 05:15:07
我复制了您的数据集,但是您预计的排序结果有点偏离了OwnerId属性。但是,在控制台应用程序(或您喜欢的任何模板)中运行这段代码,并让我知道这些是否是您正在寻找的结果:
public class GonnaSortThisData
{
public GonnaSortThisData()
{
User currentUser = new User
{
UserId = 123,
UserName = "UserMan"
};
List<Data> dataValues = new List<Data>
{
new Data {OwnerId = 123, Status = Status.New, Date = DateTime.Parse(@"2016-01-01")},
new Data {OwnerId = 456, Status = Status.New, Date = DateTime.Parse(@"2016-01-01")},
new Data {OwnerId = 789, Status = Status.New, Date = DateTime.Parse(@"2016-01-06")},
new Data {OwnerId = 123, Status = Status.New, Date = DateTime.Parse(@"2016-01-05")},
new Data {OwnerId = 456, Status = Status.Qualified, Date = DateTime.Parse(@"2016-01-05")},
new Data {OwnerId = 789, Status = Status.Converted, Date = DateTime.Parse(@"2016-01-01")},
new Data {OwnerId = 123, Status = Status.Qualified, Date = DateTime.Parse(@"2016-01-02")}
};
//var = List<Data>
var sortedValues = dataValues
.OrderByDescending(list => list.OwnerId == currentUser.UserId)
.ThenBy(list => list.Status)
.ThenByDescending(list => list.Date).ToList();
}
}
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
}
public class Data
{
public dynamic OwnerId { get; set; }
public Status Status { get; set; }
public DateTime Date { get; set; }
}
public enum Status
{
New, Qualified, Converted
}请忽略Enum和Data类,因为它们只是表示来自MongoDB数据库表的记录。动态属性将在运行时由LINQ动态解析。仔细查看对ThenBy()的调用。这是我最喜欢的LINQ扩展之一,请注意,您有能力在查询语法中这样做,但我只是选择使用方法语法。
https://stackoverflow.com/questions/38522019
复制相似问题