2012-04-11 29 views
3

我有以下SQL语句T-SQL中的LINQ转换

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

有你自己试了一些东西? (https://www.google.ca/search?ix=hca&sourceid=chrome&ie=UTF-8&q=linq+to+sql+examples) – 2012-04-11 13:13:02

+2

向您展示LINQ查询仅有些用处。您需要在内存中或通过远程LINQ提供程序(如LINQ to SQL或实体框架)来收集上下文,以使LINQ函数代替T-SQL。这就是为什么它首先让你自己有用的原因。 – 2012-04-11 13:20:52

回答

2

好吧,假设您有一个名为CorpsystemsCorpSystem对象的列表,以及一个名为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 
        }; 

或者只是AffectedSystems具有的1 TaskItemId:

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

他有一个左外连接不是内连接 – 2012-04-11 13:22:02

+0

固定,谢谢Darren – mattytommo 2012-04-11 13:24:14

+1

很好的工作!保持好友 – 2012-04-11 13:24:31

1

请参阅以下问题SQL to LINQ Tool的答案,假设您不想亲自完成此过程。