将具有多个连接的SQL转换为LINQ



我想知道如何将以下sql语句更改为c#中的Linq或Lambda扩展

SELECT m.mdes as AgeGroup,COUNT(DISTINCT(mbcd))as "No.of Member" FROM mageg m
LEFT JOIN  (select distinct(mbcd) ,mage
FROMtevtl
JOIN mvipm 
ON tevtl.mbcd = mvipm.mvip
WHERE datm >= '2014-04-01'
AND datm <= '2014-04-30'
)vip
ON m.tage >= vip.mage AND m.fage <= vip.mage
GROUP BY m.mdes

我设法完成了LINQ语句的前半部分。不确定是否正确这是前半部分。我不知道如何连接左连接

(from mem in mvipms
from log in tevtls
from grp in magegs
where mem.mage >=grp.fage && mem.mage <=grp.tage && mem.mvip.Equals(log.mbcd)
&& log.datm >= DateTime.Parse("2014-04-01") && log.datm <= DateTime.Parse("2014-04-30")
select new {mem.mvip,grp.mdes}).Distinct()

请建议。我正在使用MSSQL 2008和VS2010。

万分感谢

我不是LINQ方面的专家,但既然没有其他人回答过,那么就开始吧!

首先,你不能(AFAIK)做LINQ连接,除了等号,所以你的左连接的结构必须改变。部分出于调试目的,但也是为了可读性,我更喜欢将我的LINQ布局为块大小,所以在您的情况下,我会这样做(假设我已经正确理解了您的数据结构):

    var vip = (from t in tevtl
               join v in mvipl
               on t.mbcd equals v.mvip
               where t.datm >= new DateTime(2014, 4, 1) && t.datm <= new DateTime(2014, 4, 30)
               select new { t.mbcd, v.mage }).Distinct();
    var mv = from m in magegl
             from v in vip
             where m.tage >= v.mage && m.fage <= v.mage
             select new
             {
                 m.mdes,
                 v.mbcd
             };
    var gmv = from m in mv
              group m by new { m.mdes } into grp
              select new
              {
                  mdes = grp.Key.mdes,
                  CountMBCD = grp.Count()
              };
    var lj = from m in magegl
             join v in gmv
             on m.mdes equals v.mdes into lhs
             from x in lhs.DefaultIfEmpty()
             select new
             {
                 AgeGroup = m.mdes,
                 CountMBCD = x != null ? x.CountMBCD : 0
             };

通过解释的方式。mv是左连接的等效结构,因为它有相关的where子句,但显然它不包含任何null -它相当于INNER join。gmv是mv上的一个组,因此实际上仍然是一个INNER JOIN。然后,为了拾取缺失的模式(如果有的话),我使用添加的语法DefaultIfEmpty()在magel上重新连接-这将连接转换为相当于LEFT OUTER join。

没有任何样本数据,我还没有能够测试这一点,但我希望它给你足够的指向你在正确的方向!

相关内容

  • 没有找到相关文章

最新更新