2013-10-13 43 views
1

不工作我使用的是使用LINQ到SQL框架(DBML文件)下面的查詢。這是來自以前的問題 - Inner Join in LINQ not working correctly訂單在LINQ查詢

Order By部分似乎並沒有工作。它只是按標題排序,然後按startdate排序。我怎樣才能通過startdate命令查詢?

Dim ds = From tds In db.tbl_tripDeptStations _ 
       Join s In db.tbl_Stations On tds.tds_Stn Equals s.stn_ID _ 
       Where s.stn_County.Equals(county) _ 
       Select New With {tds.tds_Trip} 

     Dim result = (From t In db.tbl_Trips _ 
         Join ds2 In ds On t.trip_ID Equals ds2.tds_Trip _ 
         Join toop In db.tbl_TourOperators On t.tourOp_ID Equals toop.tourOp_ID _ 
         Where t.trip_StartDate >= startDate And t.trip_EndDate <= endDate And t.trip_StartDate >= Date.Today() _ 
         Order By t.trip_StartDate _ 
         Select New With {t.trip_ID, t.trip_Name, t.trip_StartDate, toop.tourOp_Name}).Distinct() 
+2

是否ORDER BY工作,如果你刪除'.Distinct()'? –

+0

啊,是的,謝謝 - 這是固定的。我需要那裏的獨特嗎?如果沒有它,返回的結果數量似乎相同。這種特殊情況下的獨特性如何工作?再次感謝。 – StrattonL

+0

我認爲這取決於'ds'子查詢是否可以返回重複'trip_ID'或不。如果它可以返回重複項,則可以在Linq中將「將ds2連接到ds ...」等同於「EXISTS」。 –

回答

0

ThenBy型運營商不能保證維持秩序的(和很多人其實並不因實施是複雜的/如果他們慢)。

如果您希望您的查詢代表Ordered集合,您應該在查詢中最後調用OrderBy運算符類型,在您的情況下,您在使用Distinct時會破壞訂單保證,它並非特定於完全不同並且也可以發生在許多其他運營商

在你的樣品的情況下,通過刪除你已經把它和不同的附加後的順序是:

.OrderBy(item=>item.trip_StartDate); 
+0

感謝您的回覆。不幸的是,'項目'部分不被識別。它在Visual Studio中以紅色突出顯示。我需要改變這個? – StrattonL

+0

你不需要去改變它,項目被定義且在同一個地方使用,你需要告訴我你鍵入的內容讓我告訴你什麼改變,所以請你現在不工作的代碼更新您的問題。 –