代码之家  ›  专栏  ›  技术社区  ›  Patrice Cote

中的LINQ子查询

  •  7
  • Patrice Cote  · 技术社区  · 15 年前

    我是一个有IQueryable,lambda表达式和LINQ的新手。我想在where子句中放入一个子查询,如下所示:

    示例代码:

    SELECT * FROM CLIENT c WHERE c.ETAT IN (
     SELECT DDV_COLUMN_VAL FROM DATA_DICT_VAL
     WHERE TBI_TABLE_NAME = 'CLIENT' AND DD_COLUMN_NAME = 'STATUS'
               AND DDV_COLUMN_VAL_LANG_DSC_1 LIKE ('ac%'))
    

    如何在LINQ中翻译这个?

    4 回复  |  直到 15 年前
        1
  •  14
  •   kbrimington    15 年前
    var innerquery = from x in context.DataDictVal
                     where x.TbiTableName == myTableNameVariable
                        && x.DdColumnName == "Status"
                        && x.DdbColumnValLangDsc1.StartsWith("ac")
                     select x.DdvColumnVal;
    
    var query = from c in context.Client
                where innerquery.Contains(c.Etat)
                select c;
    
        2
  •  4
  •   James Curran    15 年前
    from c in db.Client
    where (from d in db.DataDictVal 
           where d.TblTableName == "Client" 
             && d.DDColumnName == "Status"
             && dd.DdvColumnValLandDsc1.StartsWith("ac"))
           .Contains(c.Etat)
    select c;
    
        3
  •  1
  •   Randy Minder    15 年前

    如果您是Linq新手,那么您绝对需要两个基本工具。第一个是将大多数T-SQL语句转换为Linq的工具,称为Linqer( http://www.sqltolinq.com/ ). 这应该能解决你问题中的问题。另一个工具是LinqPad( http://www.linqpad.net/ ). 这将帮助您在练习查询时学习Linq。

    我经常使用Linqer为我转换T-SQL查询,然后使用LinqPad对其进行微调。

        4
  •  0
  •   Karthik Elumalai    8 年前

    与Linq方法语法相同的示例:

    var innerquery =  dbcontext.DataDictVal                  
                     .where(x=> x.TbiTableName == myTableNameVariable
                        && x.DdColumnName == "Status"
                        && x.DdbColumnValLangDsc1.StartsWith("ac"))
                     .select(x=>x.DdvColumnVal)
    
    var query = dbcontext.Client
                .where( c=>innerquery.Contains(c.Etat))
    

    我提供了这个答案,因为当我搜索答案时,我找不到解释方法语法中相同概念的答案。

    所以在将来,它可能会对人们有用,那些像我今天这样在内部搜索方法语法的人。 卡尔蒂克