【发布时间】:2013-10-21 08:57:38
【问题描述】:
我正在使用 Linq to SQL 框架(DBML 文件)使用以下查询。这是来自上一个问题 - Inner Join in LINQ not working correctly。
Order By 部分似乎不起作用。它只是按标题排序,然后按开始日期排序。我怎样才能让查询仅在开始日期之前订购?
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()
【问题讨论】:
-
如果您删除
.Distinct(),ORDER BY 是否有效? -
啊,是的,谢谢 - 已经解决了。我需要那里的独特之处吗?如果没有它,似乎返回的结果数量相同。在这种特殊情况下 distinct 是如何工作的?再次感谢。
-
我认为这取决于
ds子查询是否可以返回重复的trip_ID。如果它可以返回重复项,您可以在 Linq 中将Join ds2 In ds ...重写为等效的EXISTS。 -
您也可以在查询的
.Distinct()部分执行,然后在之后执行您的.OrderBy()。