c# - How to make Exists with Dynamic Linq -


how make exists dynamic linq?

i'm trying create sql clause dynamic linq. researched lot of , not found satisfactory answer.

i try convert sql query follows:

sql

select * documento exists(     select 1 titulo     documento.coddocumento = titulo.coddocumento     , documento.codempresa = titulo.codempresadocumento     , titulo.codfluxoconta = 'somevalue'     , titulo.codempresafluxoconta = 'stringnumerical') 

in common linq did follows:

var subquery2 = t in db.titulos     t.codfluxoconta == "somevalue"     && t.codempresafluxoconta == "stringnumerical"     select new {         coddoc = (int?)t.coddocumento,         codemp = (string)t.codempresadocumento     };  var query2 = d in db.documentos     subquery2.contains(new { coddoc = (int?)d.coddocumento, codemp = (string)d.codempresa })     select new{         d.coddocumento,         d.codempresa     }; 

or

var query4 = db.documentos.where(d => (db.titulos.where(t => t.codfluxoconta == "somevalue" && t.codempresafluxoconta == "stringnumerical").select(t2 => new { coddoc = (int?)t2.coddocumento, codemp = (string)t2.codempresadocumento })).contains(new { coddoc = (int?)d.coddocumento, codemp = (string)d.codempresa })); 

and did knowledge

iqueryable linq = db.set(t); var exists = linq.where("codfluxoconta == @0 && codempresafluxoconta == @1", "somevalue", "stringnumerical").select("new(\"coddocumento\" coddoc, \"codempresadocumento\" codemp)"); var query = db.documentos.where("@0.contains(new (it[\"coddocumento\"] coddocumento, it[\"codempresa\"] codempresadocumento))", exists); 

but when execute code following exception occurs:

no applicable indexer exists in type 'dynamicclass3'.

this seems work... uses outerit... , don't know through magic any inside where() works...

var sq = titulo.where("codfluxoconta == @0 && codempresafluxoconta == @1", "somevalue", "stringnumerical"); var result = documento.where("@0.any(it.coddocumento == outerit.coddocumento && it.codempresadocumento == outerit.codempresadocumento)", sq)     .select("new(coddocumento, codempresadocumento)"); 

in where(), it subquery element, while outerit documento.

i've checked sql profiler , result of query is:

select      [extent1].[coddocumento] [coddocumento],      [extent1].[codempresadocumento] [codempresadocumento]     [dbo].[documento] [extent1]      exists (select          1 [c1]         [dbo].[titulo] [extent2]         (n'somevalue' = [extent2].[codfluxoconta]) , (n'stringnumerical' = [extent2].[codempresafluxoconta]) , ([extent2].[coddocumento] = [extent1].[coddocumento]) , ([extent2].[codempresadocumento] = [extent1].[codempresadocumento])     ) 

that equivalent query.

note in dynamic linq possible write query similar 1 wrote in linq, using .contains() (but note prefer .any() .contains()). 2 queries produce same sql query entity framework.

var sq2 = db.titulo.where("codfluxoconta == @0 && codempresafluxoconta == @1", "somevalue", "stringnumerical")     .select("new(coddocumento, codempresadocumento)"); var result2 = db.documento.where("@0.contains(new(outerit.coddocumento, outerit.codempresadocumento))", sq2)     .select("new(coddocumento coddoc, codempresadocumento codemp)"); 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -