(SELECT * FROM SheetHay WHERE SheetStatus = 2)
UNION ALL(SELECT * FROM SheetHay WHERE SheetStatus = 1)
UNION ALL (SELECT * FROM SheetHay WHERE SheetStatus = 0)
UNION ALL(SELECT * FROM SheetHay WHERE SheetStatus= 3)
我得到的结果如下:
我的意思是我把所有'2'放在一起,'0'在一起,'3'在一起(没有'1'在 桌子)。但是当我使用LINQ和UNION时,我在GridID上看到了结果,SheetID是主键。我的意思是我看到表单的顺序显示为15,23,25,27,28,29等。但我想要它就像SQL结果集.23,43,25,28等
IEnumerable<SheetHay> listTwos = Get(LINQ QUERY TO GET just twos);
IEnumerable<SheetHay> listOnes = Get(LINQ QUERY TO GET just Ones);
IEnumerable<SheetHay> listZeros = Get(LINQ QUERY TO GET just Zeros);
IEnumerable<SheetHay> listThrees = Get(LINQ QUERY TO GET just Threes);
....
return listTwos.Union(listZeros).Union(listOnes).Union(listThrees);
如果您需要任何其他信息,请与我们联系。感谢。
答案 0 :(得分:3)
您不需要使用多个查询,您可以在SQL中的CASE
中使用ORDER BY
,在LINQ中使用类似的方法。
SQL:
SELECT * FROM SheetHay
WHERE SheetStatus IN(0,1,2,3))
ORDER BY CASE SheetStatus
WHEN 2 THEN 1
WHEN 1 THEN 2
WHEN 0 THEN 3
WHEN 3 THEN 4 END ASC, SheetStatus ASC
LINQ:
int[] status = {0, 1, 2, 3};
var query = db.SheetHay
.Where(s => status.Contains(s.SheetStatus))
.OrderByDescending(s => s.SheetStatus == 2)
.ThenByDescending(s => s.SheetStatus == 1)
.ThenByDescending(s => s.SheetStatus == 0)
.ThenByDescending(s => s.SheetStatus == 3)
.ThenBy(s => s.SheetStatus);
降序因为比较返回bool
而true
高于false
(1/0)。
您还可以使用条件运算符为排序返回int
:
var query = db.SheetHay
.Where(s => status.Contains(s.SheetStatus))
.OrderBy(s => s.SheetStatus == 2 ? 0 : 1)
.ThenBy(s => s.SheetStatus == 1 ? 0 : 1)
.ThenBy(s => s.SheetStatus == 0 ? 0 : 1)
.ThenBy(s => s.SheetStatus == 3 ? 0 : 1)
.ThenBy(s => s.SheetStatus);
答案 1 :(得分:0)
这个怎么样:
IEnumerable<SheetHay> sheetHays =
SheetHays
.Where(x => x.SheetStatus < 3)
.OrderByDescending(x => x.SheetStatus)
.Concat(SheetsHays.Where(x => x.SheetStatus == 3));
这是基于订单2,1,0,3(这是您的示例查询演示的内容)。如果你想要订单2,0,1,3(这是你的示例代码所暗示的那样),则需要修改它。