Вложенный запрос LINQ в

Я новичок с IQueryable, лямбда-выражениями и 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 ответов


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;

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;

Если вы новичок в Linq, вам абсолютно нужны два основных инструмента. Первый-это инструмент, который преобразует большинство операторов T-SQL в Linq под названием Linqer (http://www.sqltolinq.com/). Это должно позаботиться о запросе в вашем вопросе. Другим инструментом является LinqPad (http://www.linqpad.net/). Это поможет вам узнать Linq, как вы практикуете с запросами.

Я часто использую Linqer для преобразования запроса T-SQL для меня, а затем использую LinqPad для его точной настройки.


тот же пример с синтаксисом метода 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))

Примечание:

даю этот ответ, потому что когда я искал ответ, я не мог найти ответ, который объясняет и то же понятие в синтаксисе метода.

поэтому в будущем это может быть полезно для людей, тех, кто сегодня искал синтаксис метода, как я. Спасибо картхик!--2-->