2014-07-13 29 views
0

請考慮這個SQL腳本:OrderByDescending(O => OX).OrderBy(O => OY)不能正常工作

DECLARE @date DATE 
SELECT @date = GETDATE(); 

DECLARE @tbl TABLE (F1 INT, F2 INT, F3 DATETIME, F4 NVARCHAR(50)) 

INSERT INTO @tbl(F1,F2,F3,F4) 
VALUES(6,0,DATEADD(DAY, -8, @date),'1nima'), 
     (21, 78, DATEADD(DAY, -5, @date), '2nima'), 
     (58, 1, DATEADD(DAY, 10, @date), 'nima'), 
     (6, 56, DATEADD(DAY, 1, @date), 'nima'), 
     (0, 21, DATEADD(DAY, 0, @date), '3nima'), 
     (13, 78, DATEADD(DAY, -8, @date), '8nima'), 
     (8, 0, DATEADD(DAY, -8, @date), '9nima') 

SELECT * FROM @tbl ORDER BY F3 DESC,F1 ASC 

返回這個結果,這是正確的:

enter image description here

現在我想使用LINQ訂單不能正常工作寫代碼:

var lst = new List<cls>(); 
    lst.Add(new cls() { F1 = 6, F2 = 0, F3 = DateTime.Today.AddDays(-8), F4 = "1nima" }); 
    lst.Add(new cls() { F1 = 21, F2 = 78, F3 = DateTime.Today.AddDays(-5), F4 = "2nima" }); 
    lst.Add(new cls() { F1 = 58, F2 = 1, F3 = DateTime.Today.AddDays(10), F4 = "nima" }); 
    lst.Add(new cls() { F1 = 6, F2 = 56, F3 = DateTime.Today.AddDays(1), F4 = "nima" }); 
    lst.Add(new cls() { F1 = 0, F2 = 21, F3 = DateTime.Today.AddDays(0), F4 = "3nima" }); 
    lst.Add(new cls() { F1 = 13, F2 = 78, F3 = DateTime.Today.AddDays(-8), F4 = "8nima" }); 
    lst.Add(new cls() { F1 = 8, F2 = 0, F3 = DateTime.Today.AddDays(-8), F4 = "9nima" }); 

    var orderlist = lst.OrderByDescending(o => o.F3).OrderBy(o => o.F1).ToList(); 
    GridView1.DataSource = orderlist; 
    GridView1.DataBind(); 

它RET甕這個結果,但這是錯誤的順序:

enter image description here

爲什麼這兩個結果不相等?

謝謝

+0

var orderlist = lst.OrderByDescending(o => o.F3).ThenBy(o => o.F1).ToList(); – Rangesh

回答

2

在您的聲明;

lst.OrderByDescending(o => o.F3).OrderBy(o => o.F1).ToList(); 

...第二排序依據,可以完全替代了IEnumerable的分類標準(即替代OrderByDescending),而不是增加一個額外的標準。
你想要的是添加一個額外的二級分類標準,由ThenBy()完成;

lst.OrderByDescending(o => o.F3).ThenBy(o => o.F1).ToList(); 
1

你試過了嗎?

var orderlist = lst.OrderByDescending(o => o.F3).ThenBy(o => o.F1).ToList(); 
相關問題