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