【问题标题】:Linq to SQL "IN" Clause not workingLinq to SQL“IN”子句不起作用
【发布时间】:2014-06-05 12:29:17
【问题描述】:

我的 SQL 查询为:

select a.id, a.lastName + ',' + a.firstName FullName 
from account a
where a.id in(
        select a.EH_PP_TE_TeacherAcctID 
        from EH_PP_TeacherEvaluations a
        inner join EH_PP_TeacherEvaluationStatusesRefTable b
            on a.EH_PP_TESRT_TeacherEvalStatusIDEH = b.EH_PP_TESRT_TeacherEvalStatusID
        where b.EH_PP_TESRT_TeacherEvalStatusValue = 1)
    and a.id = '57DB0B08-4C58-4301-AB92-090D4D9B7DA5'

我想用 LINQ 翻译它。

看完下面的回答:

What is LINQ equivalent of SQL’s "IN" keyword

我查询如下:

List<Entity.Observations> outerList = new List<Entity.Observations>();
outerList = (
                from a in context.accounts
                where
                (
                        from c in context.EH_PP_TeacherEvaluations
                        join b in context.EH_PP_TeacherEvaluationStatusesRefTables on c.EH_PP_TESRT_TeacherEvalStatusIDEH equals b.EH_PP_TESRT_TeacherEvalStatusID
                        where b.EH_PP_TESRT_TeacherEvalStatusValue == 1
                ).Any()
                select new Entity.Observations
                {
                    EH_PP_TeacherAcctId = Convert.ToString(a.account.id)
                }
            ).ToList<Entity.Observations>();

但它给我的错误是:

正文必须以 select 子句或 group 子句结尾(在 Any())

请帮助我如何改进这个查询???

我是 Linq 的新手。

【问题讨论】:

  • 您需要在 where 子句内的查询中进行选择。 LINQ 查询语法总是需要select
  • Any() 大致翻译为 SQL 中的 EXISTS 关键字。如果你想要IN,你需要使用Contains()
  • @DanielKelley 但他们还没有写 select inside where over here stackoverflow.com/questions/8255205/… 因此我没有这样做
  • @BearGrylls 很有趣。但是,信息很明确。如果您想尝试更改代码,这取决于您。

标签: c# sql .net linq sql-server-2008-r2


【解决方案1】:

每个嵌套查询都需要以 select 语句结束,才能获得您要查找的结果。如果没有选择,则不会返回任何内容。

【讨论】:

    【解决方案2】:

    使用 SQL 直接翻译类似于以下内容:(我没有进行内连接,但您可以很容易地弄清楚)

    from a in context.Accounts
    where a.Id == "57DB0B08-4C58-4301-AB92-090D4D9B7DA5" && 
       context.EH_PP_TeacherEvaluations.Join(.......)
            .Any(tv=>tv.EH_PP_TE_TeacherAcctID == a.Id)
    
    select new {Id = a.Id, FullName = a.lastName + "," + a.firstName}
    

    请注意,应该有更好的方法来使用 LINQ 中的关系来执行 IN

    【讨论】:

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