0

我有一個SQL表達式如何編寫sql表達式的lambda表達式?

select S.SpecialtyName, COUNT(distinct SUC.SiteUserId) as Subscribers 
from SiteUserContent SUC Inner join 
     Specialties S on SUC.SpecialtyId = S.SpecialtyId Inner join 
     SiteUser SU on SUC.SiteUserId = SU.SiteUserId 
where SU.DeletedFlag = 0 
group by S.SpecialtyName 
Order by S.SpecialtyName 

爲同一會有什麼相應的LAMBDA體現在哪裏?

+0

我想你正在尋找相應的'Linq'表達式,而不是'Lambda'。 – gunr2171 2013-03-26 16:26:30

回答

0
var results = contex.SiteUserContent 
        .Join(context.Specialties, suc => suc.SpecialtyId, s => s.SpecialtyId, (suc, s) => new { suc, s }) 
        .Join(context.SiteUser, i = i.suc.SiteUserId, su => su.SiteUserId, (i, su) => new { suc = i.suc, s = i.s, su = su }) 
        .Where(i => i.su.DeletedFlag == 0) 
        .GroupBy(i => i.s.SpecialtyName) 
        .Select(g => new { 
            SpecialityName = g.Key, 
            Subscribers = g.Select(i => i.suc.SiteUserId) 
                .Distinct() 
                .Count() 
           }) 
        .OrderBy(i => i.SpecialityName); 
1
from suc in context.SiteUserContent 
join s in context.Specialties on suc.SpecialtyId equals s.SpecialtyId 
join su in context.SiteUser on suc.SiteUserId equals su.SiteUserId 
where su.DeletedFlag == 0 
select new { suc.SiteUserId, s.SpecialityName } into x 
group x by x.SpecialityName into g 
orderby g.Key 
select new { 
    SpecialityName = g.Key, 
    Subscribers = g.Select(i => i.SiteUserId).Distinct().Count() 
} 

生成的SQL將不會相同,但我認爲查詢執行的結果應該是相同的。

+1

(小細節)我認爲你最後錯過了一個'order by'。 – gunr2171 2013-03-26 15:17:35

+0

@ gunr2171謝謝!忘了那件事 – 2013-03-26 15:22:29