7

我是 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

4 回答 4

14
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;
于 2010-08-13T14:47:20.920 回答
4
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;
于 2010-08-13T14:44:42.917 回答
1

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

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

于 2010-08-13T14:44:36.370 回答
0

与 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))

笔记:

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

所以在未来,它可能对今天像我这样认真搜索方法语法的人有用。谢谢卡提克

于 2017-05-17T11:40:48.590 回答