[英]Linq to dataset and display linq result in repeater control
我需要顯示不同的行,實際上,根據日期字段,每年實際上應該獲得1個最新行。
我嘗試使用CTE解決此問題,但在進一步測試中,它無法正常運行,因為它將僅獲得基於ROWNumber的ROW,如果我們使用過濾器,則無法獲得預期的結果。
所以我想從表中獲取AlbumID,AlbumName,AlbumDate和AlbumYear_YYYY並將其傳遞給數據集,然后再次使用LINQt將此數據集進一步獲取僅基於年份的最新專輯的唯一行
假設我的表有以下行
AlbumID,AlbumName,AlbumDate,AlbumIcon
我的MS-SQL查詢
string sql= "SELECT AlbumID, AlbumName, AlbumIcon, AlbumDate, DATEPART(YYYY, AlbumDate) AS Year FROM PhotoAlbumName "
DataSet ds = DataProvider.Connect_Select(strSql);
DataView dv = ds.Tables[0].DefaultView;
//在此處執行LINQ並將linq的值傳遞給Pager控件
PagerControl1.BindDataWithPaging(rptAlbumsCategories, dv.Table);
我不確定如何執行此操作,但是如果它可以工作,它將消除由於以下sql查詢而發生的不必要的結果。
;WITH DistinctYEAR AS
(
SELECT AlbumID, AlbumIcon, AlbumDate, AlbumVisible,AlbumName,
ROW_NUMBER() OVER(PARTITION BY DATEPART(YYYY,AlbumDate) ORDER BY AlbumDate) AS 'RowNum'
FROM PhotoAlbumName
)
SELECT * FROM DistinctYEAR WHERE RowNum = 1 AND AlbumVisible = 1 ORDER BY AlbumDate DESC
更新:
我不確定,但我認為您的CTE錯誤。 您應該在CTE
而不是外部SELECT
上應用WHERE AlbumVisible = 1
:
;WITH DistinctYEAR AS
(
SELECT AlbumID, AlbumIcon, AlbumDate, AlbumVisible,AlbumName,
ROW_NUMBER() OVER(PARTITION BY DATEPART(YYYY,AlbumDate) ORDER BY AlbumDate) AS 'RowNum'
FROM PhotoAlbumName
WHERE AlbumVisible = 1
)
SELECT dy.*
FROM DistinctYEAR dy
WHERE RowNum = 1
ORDER BY AlbumDate DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.