Использование DISTINCT с EntityDataSource

У меня есть источник данных сущности (подключенный к базе данных SQL Server 2012) на странице aspx.NET v4. Моя декларация источника данных выглядит следующим образом:

<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 (без отличных) создает x строк, которые, поскольку представление содержит только поля из таблицы продуктов, будут содержать n повторяющихся строк., Я ожидал, что DISTINCT или GROUP BY будут дедуплицировать строки, но ни один из них не делает этого. Я подтвердил, что у меня есть столбцы, которые, я думаю, у меня есть, временно добавив в список список, отображающий каждый столбец.

1 ответ

Почему бы не попробовать добавить GROUP BY пункт, который содержит все ваши столбцы? Ссылка MSDN А вот ссылка на основную статью EntityDataSource

Как вы, наверное, знаете, в этом случае оба GROUP BY а также DISTINCT скорее всего, создаст план запроса AME в 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]" />
Другие вопросы по тегам