我假装建立一个搜索页面的产品 白衣倍数形式变量,并将它们集成动态对此查询.. ..在独立类像ProductoAtributo的条款或其他多个左联接和动态where
而且d
T-SQL查询(即我想要的)
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)
动力在哪里 - UP DATED
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);
}
的尝试 - >我最亲密的形式给出 - 更新
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();
的错误
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
左侧加入之前 - >“从TPJ在tpjoin .DefaultIfEmpty()“ 没有错误... 如果我traslade到“在db.ProductoAtributo中加入Pa” - >在db.ProductoAtributo中加入Pa。(productoAtributoWhere) 没有错误太.. ..但是t-sql查询返回3个寄存器vs 26个linq
没有在那里... LINQ和T-SQL显示了同样的结果
希望,你能帮助我.. 问候
这没有离开原来的查询联接修订
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();
个
能不能请你与你的.NET本地化运行该关闭的,我看不懂你的代码中的例外。另外,我在解决“动态”的含义时遇到了麻烦。 “Where”谓词的逻辑是什么? – Aron
我觉得'pajoin'已经不是'ProductoAtributo'集合,所以你需要改变你的表达类型 – Grundy
我的逻辑在哪里被暴露在这里.. http://stackoverflow.com/a/1263587/493166 –