C#和#x3000;linq查询按两个条件排序

C#和#x3000;linq查询按两个条件排序,c#,linq,C#,Linq,使用C#linq查询, 我想按id和updatetime对日期进行排序。 id:包含在列表“idList”中 updatetime:数据时间的类型 示例数据: 查询: .onecenter{text align:center;width:150px;} 身份证件 最后更新时间 1. 2016-02-16 2. 2016-02-14 3. 2016-02-15 4. 2016-02-17 尝试使用以下方法: var data1 = query.Where(x => idList.Cont

使用C#linq查询, 我想按id和updatetime对日期进行排序。 id:包含在列表“idList”中 updatetime:数据时间的类型

示例数据:

查询:

.onecenter{text align:center;width:150px;}

身份证件
最后更新时间
1.
2016-02-16
2.
2016-02-14
3.
2016-02-15
4.
2016-02-17
尝试使用以下方法:

var data1 = query.Where(x => idList.Contains(x.ID)).OrderByDescending(y => y.UpdateTime);
var data2 = query.Except(data1).OrderByDescending(y => y.UpdateTime);
var data = data1.Concat(data2).ToList();
使用
之外的第二个方法删除您在
数据1
中已有的内容,然后您应该能够获得以下信息:

[2016-02-17 06:22:04.167 UTC] 3 2/15/2016 12:00:00 AM
[2016-02-17 06:22:04.169 UTC] 2 2/14/2016 12:00:00 AM
[2016-02-17 06:22:04.170 UTC] 4 2/17/2016 12:00:00 AM
[2016-02-17 06:22:04.170 UTC] 1 2/16/2016 12:00:00 AM
编辑:

在数据量很大的情况下,您可以考虑将这些项保留为<代码> iQueDebug < /代码>,直到您需要处理它,而不是将其更改为<代码>列表< /代码>。这可能会节省一些时间:

var data1 = query.Where(x => idList.Contains(x.ID)).OrderByDescending(y => y.UpdateTime);
var data2 = query.Except(data1).OrderByDescending(y => y.UpdateTime);
var data = data1.Concat(data2); //don't change to List here

foreach(var dat in data){ //use it by fetching it one by one like this
}
尝试使用以下方法:

var data1 = query.Where(x => idList.Contains(x.ID)).OrderByDescending(y => y.UpdateTime);
var data2 = query.Except(data1).OrderByDescending(y => y.UpdateTime);
var data = data1.Concat(data2).ToList();
使用
之外的第二个方法删除您在
数据1
中已有的内容,然后您应该能够获得以下信息:

[2016-02-17 06:22:04.167 UTC] 3 2/15/2016 12:00:00 AM
[2016-02-17 06:22:04.169 UTC] 2 2/14/2016 12:00:00 AM
[2016-02-17 06:22:04.170 UTC] 4 2/17/2016 12:00:00 AM
[2016-02-17 06:22:04.170 UTC] 1 2/16/2016 12:00:00 AM
编辑:

在数据量很大的情况下,您可以考虑将这些项保留为<代码> iQueDebug < /代码>,直到您需要处理它,而不是将其更改为<代码>列表< /代码>。这可能会节省一些时间:

var data1 = query.Where(x => idList.Contains(x.ID)).OrderByDescending(y => y.UpdateTime);
var data2 = query.Except(data1).OrderByDescending(y => y.UpdateTime);
var data = data1.Concat(data2); //don't change to List here

foreach(var dat in data){ //use it by fetching it one by one like this
}

我同意这个问题:

var result = query.OrderByDescending(q => idList.Contains(q.ID) ? 1 : 0)
                  .ThenByDescending(q => q.updatetime);

我同意这个问题:

var result = query.OrderByDescending(q => idList.Contains(q.ID) ? 1 : 0)
                  .ThenByDescending(q => q.updatetime);


您尝试过
query.Where(m=>idList.Contains(m.ID)).OrderBy(c=>c.ID).然后by(c=>c.updatetime)
?@HariPrasad
query.Where(m=>idList.Contains(m.ID)).OrderBy(c=>c.ID).然后by(c=>c.updatetime)
这只能获取id 2和3。我看不出您的第一次查询有任何问题……应该是这样的work@gdreamlend
除了
关键字可能变为helpful@gdreamlend如果您发布完整的代码,这将有所帮助,因为我认为您的第一个查询应该可以工作,并且您可能缺少其他内容。您尝试过
query.Where(m=>idList.Contains)了吗(m.ID)).OrderBy(c=>c.ID).然后by(c=>c.updatetime)
?@HariPrasad
query.Where(m=>idList.Contains(m.ID)).OrderBy(c=>c.ID).然后by(c=>c.updatetime)
这只能获取id 2和3。我看不出您的第一次查询有任何问题……应该是这样的work@gdreamlend
除了
关键字可能变为helpful@gdreamlend如果您发布完整的代码,这将很有帮助,因为我认为您的第一个查询应该可以工作,并且您可能缺少一些其他更好使用的东西,除了……但还有一个问题需要解决ns为什么不先查询哪个OP发布的没有work@Viru是的,我现在想起来很奇怪…OP看起来是正确的…我猜OP忽略了代码中的某些内容,并且在提问时发布了正确的代码…使用第一个quert我在
var data=data1.Concat(data2)行中得到了“Timeout Error”托利斯先生()
@gdreamlend您有多少数据?似乎您执行了很长时间?使用起来更好,除了…但仍然存在一个问题:为什么不先查询发布的OP中没有的work@Viru是的,我现在想起来很奇怪…OP看起来是对的,我猜OP忽略了代码中的某些东西并且在提问时发布了正确的代码…使用了第一个quert我在
var data=data1.Concat(data2.ToList();
@gdreamlend有多少数据?似乎执行了很长时间?