【问题标题】:T-SQL to LINQ conversionT-SQL 到 LINQ 的转换
【发布时间】:2012-04-11 13:10:31
【问题描述】:

我有以下 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?

谢谢。

【问题讨论】:

  • 你自己尝试过吗? (google.ca/…)
  • 向您展示 LINQ 查询只是有点用处。您需要在内存中或通过远程 LINQ 提供程序(如 LINQ to SQL 或实体框架)收集上下文,以使 LINQ 函数代替 T-SQL。这就是为什么先自己试一试很有用的原因。

标签: c# .net sql linq linq-to-sql


【解决方案1】:

好的,假设您在名为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 的 AffectedSystems:

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
                     };

【讨论】:

  • 他有一个左外连接而不是内连接
  • 这会创建内部连接而不是外部连接
  • @user1313789 不,这是一个左外连接。请参阅此处:msdn.microsoft.com/en-us/library/bb397895.aspx 尽管我确实进行了编辑,除非您在我编辑之前使用了代码?
  • 在 a.TaskItemID == 1 它创建错误'a 不存在'的行上
  • 这是无效的 'ac.TaskItemID == 1'
【解决方案2】:

假设您不想手动完成该过程,请参阅以下 SO 问题 SQL to LINQ Tool 的答案。

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    相关资源
    最近更新 更多