C# linq 查询按两个条件排名
本文关键字:两个 条件 linq 查询 | 更新日期: 2023-09-27 18:35:08
>use C# linq query,我想按 id 和更新时间获得日期排名。id:包含在列表"idList"中更新时间:数据时间的类型
示例数据:
查询:
.onecenter{text-align:center;width:150px;}
<table border="1" cellspacing="0" cellpadding="0">
<tr >
<td class='onecenter'>id</td>
<td class='onecenter'>updatetime</td>
</tr>
<tr >
<td class='onecenter'>1</td>
<td class='onecenter'>2016-02-16</td>
</tr>
<tr >
<td class='onecenter'>2</td>
<td class='onecenter'> 2016-02-14</td>
</tr>
<tr>
<td class='onecenter'>3</td>
<td class='onecenter'>2016-02-15</td>
</tr>
<tr>
<td class='onecenter'>4</td>
<td class='onecenter'>2016-02-17</td>
</tr>
</table>
idList:
2,3
结果应为:
.onecenter{text-align:center;width:150px;}
<table border="1" cellspacing="0" cellpadding="0">
<tr >
<td class='onecenter'>id</td>
<td class='onecenter'>updatetime</td>
</tr>
<tr>
<td class='onecenter'>3</td>
<td class='onecenter'>2016-02-15</td>
</tr>
<tr >
<td class='onecenter'>2</td>
<td class='onecenter'> 2016-02-14</td>
</tr>
<tr>
<td class='onecenter'>4</td>
<td class='onecenter'>2016-02-17</td>
</tr>
<tr >
<td class='onecenter'>1</td>
<td class='onecenter'>2016-02-16</td>
</tr>
</table>
如何通过 LINQ 查询获取结果。
我试过了:
var data1 = query.Where(m => idList.Contains(m.ID)).OrderByDescending(x => x.updatetime);
var data2 = query.Where(m => !idList.Contains(m.ID)).OrderByDescending(x => x.updatetime);
var date = data1.Concat(data2).ToList();
和:
var data = query.GroupBy(m => idList.Contains(m.ID)).OrderByDescending(x => x.updatetime);
但它没有得到正确的结果。
我会使用这个查询:
var result = query.OrderByDescending(q => idList.Contains(q.ID) ? 1 : 0)
.ThenByDescending(q => q.updatetime);
尝试使用这个:
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();
使用第二个Except
删除data1
中已有的任何内容,然后您应该能够得到这个:
[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
编辑:
如果您的数据很多,您可以考虑将项目保留为IEnumerable
,直到您需要处理它而不是将其更改为 List
.这可能会节省一些时间:
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
}