2013-04-24 2 views
0

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

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

+0

'GROUP BY' только удаляет все дубликаты, если вы включите все столбцы. Можно ли включить столбцы категорий в предложения select и group by? –

+0

Нет, поскольку строки не будут одинаковыми. – Martin

ответ

0

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

Как вы, наверное, знаете, в этом случае, как и GROUP BYDISTINCT могут производить план 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]" /> 
+0

Пробовал, что раньше и это работало - также пытался использовать MAX (it.ProductID), а не просто it.productID. – Martin

+0

И я также добавил listcview, который не форматирует отображение данных «raw», чтобы проверить. Я действительно получаю одинаковые строки. – Martin

+0

Как он не работает? Если вы делаете 'select' и' group by' каждый столбец, то это то же самое, что 'select distinct'. –

Смежные вопросы