2012-04-04 23 views
0

我有一個LINQ到SQL查詢產生重複。我似乎想出如何消除這些重複的記錄。也許有人在這裏可以提供幫助。這個想法是檢索table2中「總數」的總和,該總數大於表1中的日期,這些日期大於表2的日期,並且表2中的日期大於2011-01-01。我已經實現了這一點,但由於重複,我得到的金額正好是的兩倍。你的幫助是非常讚賞LINQ到SQL查詢重複在其中加入

表結構:

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

查詢

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

您可能在t2中有兩行匹配t1中的一行。連接產生兩行,現在在t1字段中總結兩個行的重複值。你應該用where替換join。 – 2012-04-04 10:16:31

+0

我想這個,但似乎無法弄清楚如何正確地寫出這是我到目前爲止var query =從表 其中(從t2 t2在t2 其中t1.id ==「123」&& t1 .id == t2.id && t1.date> t2.date && t2.date> DateTime.Parse(「2011-01-01」) select t2.total) group t1 by t1.id into g select g.Sum(t2 => t2.total); – 2012-04-04 10:48:42

回答

2

你應該一分爲多個步驟查詢:

選擇數據你想要的:

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}; 

呼叫不同,以避免重複項目:

var distinct = data.Distinct(); 

獲得總和:

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

這使我指出了正確的方向。謝謝。 – 2012-04-04 12:22:14

0

如果你不通過ID /鍵來進行分組,並以總求和呢?

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

嘗試了這個,但最終得到了兩個更多的記錄 – 2012-04-04 10:41:45

+0

另一件你可以嘗試的就是查看產生的SQL,將它複製並粘貼到你的SQL Server Management Studio中,並在部分中運行它,以查看事件正在翻倍的位置。 context.Log = new DebuggerWriter(); – 2012-04-04 10:49:21

+0

感謝您的有用提示。 – 2012-04-04 12:14:41