2013-09-29 29 views
0

我需要顯示不同的行,實際上應該得到每個基於日期字段的最近1行。Linq到數據集並顯示linq結果在中繼器控制

我試圖解決這個使用CTE,但進一步測試它不能正常工作,因爲它只會得到基於ROWumber的行,如果我們使用過濾器,然後它不會得到所需的結果。

,所以我想從表中得到ALBUMID,ALBUMNAME,AlbumDate和AlbumYear_YYYY,並把它傳遞給數據集,然後使用LINQ againt此數據集基於年度年僅

最新專輯得到進一步的唯一行假設我的表有以下行

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; 

// DO LINQ這裏和LINQ的值傳遞給傳呼機控制

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 

UPDATE:

+0

貴「UPDATE」的意思是,你的答案是現在已經回答?除此之外,我認爲你的cte是不正確的。您應該將'Where'子句應用於'CTE'而不是外部'SELECT'。 –

+0

不,我只是添加了一個鏈接,用戶也希望根據日期字段獲取唯一的數據,但使用鏈接。 t並沒有顯示完整的例子... – Learning

回答

1

我不知道,但我認爲你的CTE不正確。您應該應用在CTEWHERE AlbumVisible = 1不上外SELECT

;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 
+0

這將是偉大的..讓我試試... – Learning

+0

現在它讓我每年的所有行,但它得到我的部分結果,因爲它仍然沒有正確排序' OVER(PARATTION BY DATEPART(YYYY,AlbumDate)ORDER BY AlbumDate DESC)AS'RowNum'' – Learning

+0

tim,它應該讓我擁有日期'2012-11-26'的專輯,但它讓我'2012年12月2日'爲年2012.我不知道如何使其正常工作.. – Learning