对实体数据源使用DISTINCT



我在。net v4 aspx页面上有一个实体数据源(连接到SQL Server 2012数据库)。我的数据源声明如下所示:

<asp:EntityDataSource ID="BlahBlah" runat="server" 
    ConnectionString="name=BlahBlah" 
    DefaultContainerName="BlahBlah" EnableFlattening="False" 
    EntitySetName="vw_shop_ProductListWithIndivCats" 
    Where="it.Display =true" OrderBy="it.[DisplayPriority]" 
    Select="DISTINCT it.[ProductID], it.[Name], it.[Short_rubric],  it.[Price],  it.[Available], it.[Display], it.[ProductDetailLayoutID], it.[DisplayPriority] " >

当用户与站点交互时,在代码中修改WHERE值。实体比SELECT语句中的列多

数据显示在gridview中,除了DISTINCT关键字不受尊重外,工作得很好,即来自表的重复行正在gridview中显示。

有什么建议吗?

这个问题的更多细节。实体(它是一个视图)vw_shop_ProductListWithIndivCats中的列是:

ProductID
Name
Short_rubric
Rubric
Price
Postage
Image_small
Image_Large
ImageType
Available
Display
ProductDetailLayoutID
DisplayPriority
CategoryID
Category

大多数字段派生自产品表。在视图中,Categories表有一个多对多连接,最后两个字段通过通常的链接表进行中介。

在用户界面中,用户可以按类别选择产品,由于产品可能有多个类别,例如n个类别,select语句(不包含distinct)产生x行,由于视图只包含产品表中的字段,因此将包含n个重复行。我期待DISTINCT或GROUP BY删除行,但也没有。通过临时放置一个列表视图来显示每一列

为什么不尝试添加包含所有列的GROUP BY子句呢?这里是到EntityDataSource主文章的链接

你可能知道,在这种情况下,GROUP BYDISTINCT都可能在SQL Server中产生相同的查询计划。

所以你会把它改成这样(去掉DISTINCT):

<asp:EntityDataSource ID="BlahBlah" runat="server" 
    ConnectionString="name=BlahBlah" 
    DefaultContainerName="BlahBlah" EnableFlattening="False" 
    EntitySetName="vw_shop_ProductListWithIndivCats" 
    Where="it.Display =true" OrderBy="it.[DisplayPriority]" 
    Select="it.[ProductID], it.[Name], it.[Short_rubric],  it.[Price],  it.[Available], [Display], it.[ProductDetailLayoutID], it.[DisplayPriority]"
    GroupBy="it.[ProductID], it.[Name], it.[Short_rubric],  it.[Price],  it.[Available], it.[Display], it.[ProductDetailLayoutID], it.[DisplayPriority]" />

相关内容

  • 没有找到相关文章

最新更新