将DISTINCT与EntityDataSource一起使用

时间:2013-04-24 07:22:49

标签: asp.net entitydatasource

我在.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语句

中的列数

数据以网格视图显示,除了DISTINCT关键字未被遵守外,其工作正常,即表格中的重复行显示在网格视图中。

有什么建议吗?

问题的更多细节。实体中的列(视图)vw_shop_ProductListWithIndivCats为:

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

大多数字段都是从产品表中派生出来的。在视图中,有许多人加入Categories表,其中最后两个字段通过通常的链接表进行调解。

在用户界面中,用户可以按类别选择产品,并且由于产品可能有多个类别,例如n个类别,selct语句(没有distinct)产生x行,因为视图只包含产品表格中包含的字段n个重复的行。我期待DISTINCT或GROUP BY重复删除行,但两者都没有。我已经通过暂时放入显示每列

的列表来确认我拥有我认为的列

1 个答案:

答案 0 :(得分:0)

为什么不尝试添加包含所有列的GROUP BY子句? MSDN Link这是指向主EntityDataSource article

的链接

您可能知道,在这种情况下,GROUP BYDISTINCT都可能在SQL Server中生成ame查询计划。

所以你要把它改成这样(放下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]" />