2016-11-23 79 views
1

我有一个TSQL代码有关系和左外连接2条件,但我不能将其转换为LINQ语法。转换左外连接与条件相关的LINQ

SELECT ss.StateID, 
     Count(CASE WHEN ss.StateID = sr.FromStateID OR ss.StateID = sr.ToStateID THEN 1 END) AS CountState 
FROM SupStates ss 
     LEFT JOIN SupRules sr 
     ON ss.StateID IN (sr.FromStateID, sr.ToStateID) 
GROUP BY ss.StateID 

我BUIT这个代码,但它不与任何关系回到​​:

from ss in this.Data() 
          from sp in supRule 
          where 
           ss.StateID == sp.FromStateID || 
           ss.StateID == sp.ToStateID 
          group new { ss, sp } by new 
          { 
           StateID = ss.StateID 
          } into g 
          select new 
          { 
           StateID = g.Key.StateID, 
           RuleCount = g.Count() 
          } 

我想与0的关系在result.Is有加STATEID任何方式使用LINQ改写呢?

回答

3

Linq不返回任何0的原因是因为它正在进行内连接。

我相信你可以做到的东西,如相同的(请原谅我,如果代码不实际运行,我的LINQ是有点生疏!):

from ss in this.Data() 
select new { 
    ss.StateID, 
    CountState = (from sp in supRule 
        where ss.StateID == sp.FromStatusID || ss.StateID == sp.ToStateID 
        select sp.Id).Count() 
} 
+0

感谢ü@mo_roodi –