-1

我在 .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 个类别,selct 语句(没有 distinct)产生 x 行,因为视图仅包含字段形式,产品表将包含 n 个重复行. 我期待 DISTINCT 或 GROUP BY 对行进行重复数据删除,但两者都没有。我已经通过临时放入一个显示每一列的列表视图来确认我拥有我认为拥有的列

4

1 回答 1

1

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

您可能知道,在这种情况下,两者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]" />
于 2013-04-24T07:44:15.150 回答