I'm pretend to build a search page for a products Whit multiples form variables and integrates them to this query.. dynamically.. in where clauses of independents class like ProductoAtributo or others
And the d
T-SQL QUERY ( That I want )
SELECT
p.*, tpa.*, pa.*, tp.*
FROM
Producto p
LEFT JOIN
ProductoAtributo pa ON pa.ProductoId=p.ProductoId
LEFT JOIN
TipoProductoAtributo tpa ON tpa.AtributoId=pa.AtributoId AND tpa.TipoProductoId=p.TipoProductoId
LEFT JOIN
TipoProducto tp ON p.TipoProductoId = tp.TipoProductoId
WHERE
(pa.Valor = '3' AND pa.AtributoId=7) OR ( pa.Valor = '3' AND pa.AtributoId=6 )
Dynamic Where -- UPDATED
Func<ProductoAtributo, bool> productoAtributoWhere = Pa => true;
string CantidadDormitorios = "3";
if (! String.IsNullOrEmpty(CantidadDormitorios))
{
productoAtributoWhere = Pa => (Pa.Valor == CantidadDormitorios && Pa.AtributoId == 7) || (Pa.Valor == CantidadDormitorios && Pa.AtributoId == 6);
}
the attempting -> my closest aproach -- UPDATED
var producto = from P in db.Producto
join Tp in db.TipoProducto on P.TipoProductoId equals Tp.TipoProductoId into tpjoin
from TpJ in tpjoin.DefaultIfEmpty()
join Pa in db.ProductoAtributo on P.ProductoId equals Pa.ProductoId into pajoin
from PaJ in pajoin.AsQueryable<ProductoAtributo>().Where(productoAtributoWhere).DefaultIfEmpty()
join Tpa in db.TipoProductoAtributo on PaJ.AtributoId equals Tpa.AtributoId into tpajoin
from TpaJ in tpjoin.DefaultIfEmpty()
select new { P };
var producto1 = producto.ToList();
THE ERROR
Error 3 'System.Collections.Generic.IEnumerable<SGI.Models.ProductoAtributo>' no contiene una definición para 'Where' y la mejor sobrecarga del método de extensión 'System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,bool>)' tiene algunos argumentos no válidos D:\Documentos\SGI6\SGI\Areas\Cotizacion\Controllers\CotizacionController.cs 55 22 Cotizacion
Error 4 Argumento 2: no se puede convertir de 'System.Linq.Expressions.Expression<System.Func<SGI.Models.ProductoAtributo,bool>>' a 'System.Func<SGI.Models.ProductoAtributo,int,bool>'. D:\Documentos\SGI6\SGI\Areas\Cotizacion\Controllers\CotizacionController.cs 55 35 Cotizacion
Before the left joins -> "from TpJ in tpjoin.DefaultIfEmpty()" no errors... If i traslade the where to the " join Pa in db.ProductoAtributo" -> join Pa in db.ProductoAtributo.Where(productoAtributoWhere) No errors too ..however the t-sql query returns 3 register vs 26 the linq
without where ...linq and t-sql display the same results
Hope, you can help me .. Greetings
This the original query without the left joins UPDATED
var producto = from P in db.Producto
join Tp in db.TipoProducto on P.TipoProductoId equals Tp.TipoProductoId
join Pa in db.ProductoAtributo.Where(productoAtributoWhere) on P.ProductoId equals Pa.ProductoId
join Tpa in db.TipoProductoAtributo on Pa.AtributoId equals Tpa.AtributoId
select new { P };
var producto1 = producto.ToList();