2
我有如下表:LINQ2SQL不返回相同的結果爲T-SQL ...
Paciente - > PacienteTag - >標籤
典型的N:Paciente和標籤之間米,中介表。
我想獲得每個標籤有多少患者。很簡單:
SELECT Tag.TagName, COUNT(PacienteTag.TagId) AS Totals FROM Tag
LEFT JOIN PacienteTag ON Tag.TagId = PacienteTag.TagId
GROUP BY Tag.TagName
ORDER BY Tag.TagName
結果是一個簡單的表是這樣的:
Tag1, 0
Tag2, 0
Tag3, 0
Tag4, 2
Tag5, 0
Etc…
然而,當我建立了我的LINQ2SQL(給我有限的LINQ2SQL知識)的那個版本,結果出來,如:
Tag1, 1
Tag2, 1
Tag3, 1
Tag4, 2
Tag5, 1
Etc…
困惑,但或多或少了解LINQ在幹什麼,我下載了Linqer並告訴它爲我轉換SQL表達式。
它想出了這一點:
from t in db.Tag
join t0 in db.PacienteTag on t.TagId equals t0.TagId into t0_join
from t0 in t0_join.DefaultIfEmpty()
group t by new {
t.TagName
} into g
orderby
g.Key.TagName
select new {
g.Key.TagName,
Totals = (Int64?)g.Count()
}
這是不是遠從我的做法。但令人驚訝的是,這也帶來了相同的錯誤結果!
我可以看到錯誤「是」在哪裏,但我不能與替代方案來。
我在做什麼錯?
注意:在上面的示例中,PacienteTag表有兩個將Tag4與兩個隨機患者相關聯的記錄,我的T-SQL正在返回正確的值。
想法?
THanks,這個技巧,我不得不使用:「orderby t.TagName」 – 2009-12-03 15:31:00
對不起。更正了代碼。我習慣於從EF中執行ObjectQuery語法。 – mkedobbs 2009-12-03 15:53:45