2012-04-04 4 views
0

Ich habe eine LINQ zu SQL-Abfrage, die Duplikate erzeugt. Ich kann scheinen, herauszufinden, wie man diese doppelten Aufzeichnungen beseitigt. Vielleicht kann hier jemand helfen. Die Idee ist, die Summe der "Summe" aus Tabelle2 abzurufen, die für Daten in Tabelle 1 auftritt, die größer sind als die Daten von Tabelle2, und außerdem Daten in Tabelle2, die größer als 2011-01-01 sind. Was ich habe erreicht das aber wegen Duplikate bekomme ich genau die doppelte Summe. Ihre Hilfe wird sehr geschätztLINQ zu SQL-Duplikate in Abfrage mit Join

Tabellenstruktur:

table1: id, date 
table2: id, date, total 

Die Abfrage

from t1 in table1 
        join t2 in table2 on t1.id equals t2.id into x 
        from y in x 
        where t1.id == "123" && t1.date > y.date && y.date > DateTime.Parse("2011-01-01") 
        group t1 by new { y.total} into g 

        select g.Sum(t1 => t1.total); 
+0

Sie haben wahrscheinlich zwei Zeilen in t2 mit einer Zeile in t1. Join erzeugt zwei Zeilen, addiert jetzt beide Zeilen mit doppelten Werten in t1-Feldern. Sie sollten Join durch wo ersetzen. –

+0

Ich versuche dies, aber kann nicht herausfinden, wie dies richtig geschrieben ist dies ist, was ich bisher var query = von t1 in Tabelle wo (von t2 in t2 wo t1.id == "123" && t1 .id == t2.id && t1.date> t2.idat && t2.date> DateTime.Parse ("2011-01-01") wählen Sie t2.total) Gruppe t1 durch t1.id in g auswählen g. Sum (t2 => t2.total); –

Antwort

2

Sie sollten die Abfrage in mehreren Schritten aufgeteilt:

die Daten Wählen Sie:

var data = 
from t1 in table1 
join t2 in table2 on t1.Id equals t2.Id 
where t1.Id == "123" && t1.Date > t2.Date && t2.Date > DateTime.Parse("2011-01-01") 
select new {t1.Id, t2.Date, t2.Total}; 

Anruf verschiedene sich wiederholende Elemente zu vermeiden:

var distinct = data.Distinct(); 

Erhalten Sie die Summe:

return distinct.GroupBy(x => x.Date) 
       .Select(g => g.Sum(item => item.Total)); 
+0

Dies wies mich in die richtige Richtung. Vielen Dank. –

0

Wenn Sie es nicht durch eine ID/Key werden die Gruppierung und durch die Gesamt Summieren?

wie in

group t1 by new { y.Id} into g 
+0

versuchte dies, aber endete damit, zwei weitere Datensätze dupliziert zu bekommen –

+0

Eine andere Sache, die Sie versuchen könnten, ist die SQL zu betrachten, kopieren, und fügen Sie es in Ihr SQL Server Management Studio und führen Sie es in Abschnitt, um zu sehen, wo Dinge verdoppeln. context.Log = new DebuggerWriter(); –

+0

danke für den nützlichen Tipp. –