.Net - C #: Entity Framework Querys complexes

0

Greetings to all.

I am starting to study Entity Framework and I have had a couple of questions:

With the traditional approach of ADO.Net I can create queries or complex queries, that is, make use of INNER JOIN, LEFT JOIN, of functions such as MAX (), SUM (), GROUP BY, ORDER BY and make use of of several tables and in the SELECT bring specific fields or dynamic querys if a parameter is sent or not, making use of strings, of AddParameters and later doing the ExecuteQuery (). How could I achieve the same with Entity Framework?

An example of a serious query:

SELECT ic_clie.cclie, ic_clie.cclex, ic_clie.nombr, ic_dire.telef AS contacto, ic_prod.cprod, ic_prod.cprex,  ic_prod.nombr, atr01.nombr AS atr01_nombr, atr02.nombr AS atr02_nombr, atr03.nombr AS atr03_nombr, atr04.nombr AS atr04_nombr, 
atr05.nombr AS atr05_nombr, atr06.nombr AS atr06_nombr, atr07.nombr AS atr07_nombr, atr08.nombr AS atr08_nombr, 
atr09.nombr AS atr09_nombr, atr10.nombr AS atr10_nombr, sum(ic_pedd.cannd) AS cannd, ic_inve.canti ,ic_prod.unmev, SUM(ic_pedd.cannd*ic_pedd.precu) AS ValorPedido, imone.cmone,im_mone.cemon 
FROM ic_pedc
            INNER JOIN ic_pedd ON ic_pedd.cempr= ic_pedc.cempr AND ic_pedd.cpedi = ic_pedc.cpedi 
            INNER JOIN ic_clie ON ic_clie.cempr= ic_pedc.cempr AND ic_clie.cclie = ic_pedc.cclie 
            INNER JOIN ic_prod ON ic_prod.cempr= ic_pedd.cempr AND  ic_prod.cprod = ic_pedd.cprod 
            INNER JOIN ic_inve ON ic_inve.cempr= ic_pedd.cempr AND  ic_inve.cprod = ic_pedd.cprod 
            INNER JOIN ic_dire ON ic_dire.cclie = ic_clie.cclie AND ic_dire.princ = 'S' 
            LEFT JOIN ic_atrv AS atr01 ON atr01.catri = 1 AND atr01.ccatv = ic_prod.atr01 AND atr01.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr02 ON atr02.catri = 2 AND atr02.ccatv = ic_prod.atr02 AND atr02.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr03 ON atr03.catri = 3 AND atr03.ccatv = ic_prod.atr03 AND atr03.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr04 ON atr04.catri = 4 AND atr04.ccatv = ic_prod.atr04 AND atr04.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr05 ON atr05.catri = 5 AND atr05.ccatv = ic_prod.atr05 AND atr05.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr06 ON atr06.catri = 6 AND atr06.ccatv = ic_prod.atr06 AND atr06.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr07 ON atr07.catri = 7 AND atr07.ccatv = ic_prod.atr07 AND atr07.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr08 ON atr08.catri = 8 AND atr08.ccatv = ic_prod.atr08 AND atr08.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr09 ON atr09.catri = 9 AND atr09.ccatv = ic_prod.atr09 AND atr09.cempr = 'PARAMETRO' 
            LEFT JOIN ic_atrv AS atr10 on atr10.catri = 10 AND atr10.ccatv = ic_prod.atr10 AND atr10.cempr = 'PARAMETRO' 
            LEFT JOIN im_mone ON im_mone.cmone = ic_pedc.cmone 
WHERE ic_pedd.cannd > 0 AND ic_pedc.cempr = 'PARAMETRO' AND ic_pedc.estad >= 2 AND DATE(ic_pedc.fecho) >= PARAMETRO_FECHA' AND DATE(ic_pedc.fecho) <= 'PARAMETRO_FECHA' AND ic_prod.cprex = 'PARAMETRO' 
GROUP BY ic_clie.cclie, ic_prod.cprod, ic_prod.cprex; 

The previous query could easily be implemented in a method in my DAL, using if (parameters) to evaluate if a search parameter should be added and thus make it dynamic. But how could I do the same with EF?

Thank you.

    
asked by Julian David 03.07.2018 в 02:58
source

0 answers