Использование 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]" />