Linq到数据集和显示linq导致转发器控制

时间:2013-09-29 11:38:06

标签: c# sql-server linq linq-to-sql

我需要显示不同的行,实际上应该根据日期字段获得每年最新的1行。

我尝试使用CTE解决这个问题,但是在进一步测试时它没有正常工作,因为它只会获得基于ROWNumber的ROW,如果我们使用过滤器,那么它就无法获得所需的结果。

所以我想从表中获取AlbumID,AlbumName,AlbumDate和AlbumYear_YYYY并将其传递给数据集,然后再使用LINQ这个数据集来进一步获取基于YEAR年度最新专辑的唯一行

假设我的表有以下行

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 HERE并将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

更新:

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为你的cte不正确。您应该应用WHERE AlbumVisible = 1上的CTE而不是外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