2014-11-10 2 views
-4

pd - моя страница;LINQ запрос, отображающий результат дважды

ProductDetail pd = new ProductDetail(); 

выборки данных и она сильна в данных

var data = 
    from product in db.Products 
    from orders in db.Orders 
    from od in db.OrderDetails 
    from dpt in db.Dpts 
    where orders.CId.Equals(
     (from name in db.Companies 
     where name.Cname.Equals(selectedcomp) 
     select name.CId).FirstOrDefault()) 
    && od.OrdId.Equals(orders.OrdId) 
    && product.PId.Equals(od.PId) 
    select new 
    { 
     orders.Billno , 
     orders.Date, 
     orders.pharm , 
     product.Pname, 
     product.Purchasedate, 
     product.Purchaserate, 
     product.Salesrate, 
     product.Supplier, 
     od.Quantity, 
     od.Amount 
    }; 

он отображает значение данных дважды в ListBox.

pd.ProductDescription.ItemsSource = 
    (from dat in data 
    select dat).ToList();          
+0

Лучший способ отладить это - открыть SSMS и набрать каждый из подзапросов и просмотреть результаты. –

+2

Какой смысл иметь 'из dpt в db.Dpts' в этом запросе? Вы не используете 'dpt' в месте или для выбора, поэтому все, что он будет делать, это создать повторяющиеся результаты для каждой строки в этой таблице. – juharr

+0

Его легче прочитать запрос, если вы написали его без кросс-соединений – Magnus

ответ

0

@juharr является правильным. Вы не используете db.Dbts в условии where, поэтому вы перекрестно объединяете результаты дублирования. Возможно, в таблице db.Dbts у вас есть 2 записи.

Я думаю, что вы должны работать над вашим запросом. Несколько советов:

  • Мы не используем Перекрестные соединения, а мы используем join заявление
  • Вы должны получить ИДС перед выполнением вашего основного запроса
  • Возможно Вы не внешние ключи в вашем базы данных, вы должны учитывать, что
+0

dpt table issue –

0

При получении повторяющихся элементов из запроса в LINQ или SQL, первый чек на плохие данные, а затем исследовать его как плохое соединение. Лучше всего разделить его на одну таблицу, а затем добавить соединения в один за другим, пока не получите дублирование. Затем сделайте это соединение достаточно конкретным, чтобы он не дублировал.

2

Я думаю, что ваша проблема заключается в перекрестном соединении с таблицей Dpts. Вы не используете результаты из этой таблицы в месте или выберите, поэтому я не думаю, что вам это нужно. Попробуйте удалить from dpt in db.Dpts и проверьте, не устраняет проблему. Я предполагаю, что вы получаете n дубликатов, где n - общее количество строк в db.Dpts.

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