簡體   English   中英

Linq到數據集並在轉發器控制中顯示linq結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM