T-SQL转换为LINQ

3

我有以下SQL语句:

SELECT 
    c.CorpSystemID, c.SystemName  , 
    case when a.TaskItemID is NULL then 'false' else 'true' end as Assigned
FROM CorpSystems c 
LEFT OUTER JOIN
     (SELECT CorpSystemID, TASKItemID 
      FROM AffectedSystems 
      where TASKItemID = 1) a ON c.CorpSystemID = a.CorpSystemID

请问有人能帮我将这个语句转换为LINQ吗?

谢谢。


2
展示LINQ查询只是有点用处。您需要在内存中或通过远程LINQ提供程序(如LINQ to SQL或实体框架)收集上下文,以使LINQ能够代替T-SQL工作。这就是为什么首先自己尝试很有用的原因。 - P.Brian.Mackey
2个回答

3
假设您有一个名为“Corpsystems”的变量,其中包含您的“CorpSystem”对象列表,以及一个名为“AffectedSystems”的变量,其中包含您的“AffectedSystem”对象列表。请尝试以下操作: 编辑:要在所有受影响的系统上进行连接,请尝试以下操作:
var matches = from c in CorpSystems
              join a in AffectedSystems on c.CorpSystemId equals a.CorpSystemId into ac
              from subSystem in ac.DefaultIfEmpty()
              select new
                     {
                         c.CorpSystemId,
                         c.SystemName,
                         Assigned = subSystem != null && subSystem.TaskItemId != null
                     };

或者只针对具有TaskItemId为1的受影响系统:

var matches = from c in CorpSystems
              join a in AffectedSystems.Where(as => as.TaskItemId == 1)
                  on c.CorpSystemId equals a.CorpSystemId into ac
              from subSystem in ac.DefaultIfEmpty()
              select new
                     {
                         c.CorpSystemId,
                         c.SystemName,
                         Assigned = subSystem != null && subSystem.TaskItemId != null
                     };

1
他使用的是左外连接而不是内连接。 - Darren
@user1313789 不,这是左连接。请看这里:http://msdn.microsoft.com/en-us/library/bb397895.aspx 尽管我进行了编辑,除非你正在使用我编辑之前的代码? - Mathew Thompson
此代码不合法:'ac.TaskItemID == 1'。 - Yuri
@user1313789 抱歉,我新编辑了一下,请检查一下。我应该使用 subSystem 变量而不是 ac,因为我已经将其投影到了 ac 上。 - Mathew Thompson
CorpSystems有7条记录,我期望得到全部7条记录,但实际上只收到了4条。不过还是谢谢你的尝试 :-) - Yuri
显示剩余5条评论

1

查看以下 SO 问题的答案 SQL to LINQ Tool,假设您不想手动处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接