2015-05-08 4 views
0

Я пытаюсь реорганизовать этот запрос к EF запроса:Найти все дубликаты записей в таблице SQL с Entity Framework с помощью нескольких colums

SELECT 
    PS_Adressen.AdName, PS_Adressen.AdVorname, 
    PS_Adressen.AdStrasse, PS_Adressen.AdStrasseNr, PS_Adressen.AdPLZ6 
FROM 
    PS_Besuch 
JOIN 
    PS_Adressen ON PS_Besuch.BeAdNr = PS_Adressen.Adnr 
WHERE 
    BeAbMonat = @Month 
    AND BeHostessNr = @Nr 
    AND (PS_Besuch.BeKoffer = 1 OR PS_Besuch.BeKoffer = 2 
     OR PS_Besuch.BeKoffer = 3) 
GROUP BY 
    PS_Adressen.AdName, PS_Adressen.AdVorname, 
    PS_Adressen.AdStrasse, PS_Adressen.AdStrasseNr, PS_Adressen.AdPLZ6 
HAVING 
    COUNT(BeNr) > 1 

Я нашел этот пост: Find all duplicate records in SQL table with Entity Framework

Но это только позволяет мне проверьте, является ли одно значение, подобное имени, дублирующимся, но не разными столбцами.

Я начал с:

var query = from visit in db.Visits 
      join address in db.Addresses on visit.AddressId equals address.Id 
      group address by new { 
         address.Name, 
         address.Prename, 
         address.Street, 
         address.StreetNr, 
         address.Zip, 
         address.ZipLong, 
         visit.VisitNr 
        } into temp 
      select new { 
        Name = temp.Key.Name, 
        Prename = temp.Key.Prename, 
        Street = temp.Key.Street, 
        StreetNr = temp.Key.StreetNr, 
        Zip = temp.Key.Zip, 
        ZipLong = temp.Key.ZipLong, 
        VisitNr = temp.Key.VisitNr 
       }; 

var list = query.Where(x => x.VisitNr.Count() > 1).ToList(); 

Но здесь, где положение не является правильным. Что-то с графом кажется неправильным.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Благодаря NPadrutt

+0

Не могли бы вы указать, что конкретно у вас возникли проблемы с? Если вы вообще не знаете, с чего начать, переведя SQL в LINQ to Entities, вам нужно будет пройти некоторые учебные пособия по EF. –

+0

Я могу выбрать и сгруппировать, но тогда я не смог найти способ перевести это на Linq .. Я добавил код моего последнего кода. Поскольку я уже много пробовал, группировка уже вне запроса. – NPadrutt

+0

Спасибо за добавление кода, который помогает. Не могли бы вы показать, что вы на самом деле используете для третьего параметра, так как вы говорите, что проблема возникает? –

ответ

1

Попробуйте этот код:

var query = from visit in db.Visits 

        join address in db.Addresses on visit.AddressId equals address.Id 

        group address by new { 
         address.Name, 
         address.Prename, 
         address.Street, 
         address.StreetNr, 
         address.Zip, 
         address.ZipLong 
        } into temp 
       select new { 
        Name = temp.Key.Name, 
        Prename = temp.Key.Prename, 
        Street = temp.Key.Street, 
        StreetNr = temp.Key.StreetNr, 
        Zip = temp.Key.Zip, 
        ZipLong = temp.Key.ZipLong, 
        RecCount = temp.Count() 
       }; 

      var list = query.Where(x => x.RecCount > 1).ToList(); 
+0

Это возвращает нулевые элементы, хотя исходный скрипт возвращает 386. – NPadrutt

+0

Являются ли исходные таблицы для исходного скрипта и linqquery одинаковыми? Меня путают разные имена таблиц и полей, а также другое количество полей в таблице [адреса] – Sohaty

+0

Да, они одинаковы. но поскольку db имеет довольно плохое имя, я устанавливаю для них новое имя. – NPadrutt

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