【问题标题】:Nested WHERE IN clause SQL to LINQ嵌套 WHERE IN 子句 SQL to LINQ
【发布时间】:2014-02-05 12:17:48
【问题描述】:

我的 SQL 中有一个嵌套的 WHERE IN 子句,这将如何转换为 LINQ,使用 lambda 表达式的奖励积分。对所有这些都是新的。

SELECT EndowmentID
  FROM Criteria c
 WHERE c.ID IN(

       SELECT CriterionID
         FROM Filters
        WHERE ChoiceID IN(

              SELECT ChoiceID
                FROM Responses
               WHERE ApplicationID = 1

              )

       )

【问题讨论】:

    标签: sql asp.net-mvc linq lambda


    【解决方案1】:

    这个查询肯定可以使用连接来改进...

    SELECT EndowmentID
    FROM
        Criteria C
        JOIN Filters F ON C.ID = F.CriterionID
        JOIN Responses R ON F.ChoiceID = R.ChoiceID
    WHERE R.ApplicationID = 1
    

    根据您的表的键,您可能需要选择 DISTINCT

    您可以从那里编写一个简单的 LINQ 查询:

    from c in Criteria
    join f in Filters on c.ID equals f.CriterionID
    join r in Responses on f.ChoiceID equals r.ChoiceID
    where r.ApplicationID = 1
    select c.EndowmentID
    

    同样,您可能必须对此进行 Distinct()。

    【讨论】:

    • +1 开箱即用,像我一样盲目地将端口查询移植到 linq
    【解决方案2】:
    var result =
        Criteria.Where(c => 
            Filters.Where(f =>       
                Responses.Where(r => r.ApplicationId == 1).Select(r => r.ChoiceId)
                    .Contains(f.ChoiceId)
            ).Select(f => f.CriterionId)
            .Contains(c.Id)
         ).Select(c => EndowmentId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2010-10-25
      • 2023-01-13
      • 1970-01-01
      • 2021-07-05
      • 2010-09-23
      相关资源
      最近更新 更多