Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq查询动态_Linq_Dynamic Linq - Fatal编程技术网

Linq查询动态

Linq查询动态,linq,dynamic-linq,Linq,Dynamic Linq,我有一个linq查询: var query = (from l in _contexto.lineasencargos join a in _contexto.articulos on l.IDARTICULO equals a.IDARTICULO join af in _contexto.articulofamilia on a.IDARTICULO equals af.IDA

我有一个linq查询:

var query = (from l in _contexto.lineasencargos
                             join a in _contexto.articulos on l.IDARTICULO equals a.IDARTICULO
                             join af in _contexto.articulofamilia on a.IDARTICULO equals af.IDARTICULO
                             join f in _contexto.familias on af.IDFAMILIA equals f.IDFAMILIA
                             join e in _contexto.encargos on l.IDENCARGO equals e.IDENCARGO
                             where e.FECHAHORAENCARGOS >= _finder.FechaDe &&
                                e.FECHAHORAENCARGOS <= _finder.FechaA &&
                                e.FECHAHORARECOGERENCARGOS >= _finder.FechaRecogerDe &&
                                e.FECHAHORARECOGERENCARGOS <= _finder.FechaRecogerA &&
                                e.clientes.RAZONSOCIALCLIENTE.Contains(_finder.Cliente)
                         group l by new  { l.IDARTICULO, l.CANTIDADLINEAENCARGO,a.DESCRIPCIONARTICULO,f.DESCRIPCION,f.IDFAMILIA }
                             into g
                                 select new listaEncargosAgrupados
                             {
                                 IdArticulo=(int)g.Key.IDARTICULO,
                                 DescripcionArticulo=g.Key.DESCRIPCIONARTICULO,
                                 IdFamilia=g.Key.IDFAMILIA,
                                 DescripcionFamilia=g.Key.DESCRIPCION,
                                 SumaCantidad = (decimal)g.Sum(x => x.CANTIDADLINEAENCARGO),
                                 SumaPrecio = (decimal)g.Sum(x => x.PRECIOLINEAENCARGO),
                                 Total = (decimal)((decimal)g.Sum(x => x.CANTIDADLINEAENCARGO) * g.Sum(x => x.PRECIOLINEAENCARGO))
                             });
但此处的不正确,因为IDTIENDA包含在\u上下文中。encargos而不在列表中

我怎样才能解决这个问题


谢谢

e
添加到分组语句中,并将
IDTIENDA
列表添加到结果中:

var query = (from l in _contexto.lineasencargos
                             join a in _contexto.articulos on l.IDARTICULO equals a.IDARTICULO
                             join af in _contexto.articulofamilia on a.IDARTICULO equals af.IDARTICULO
                             join f in _contexto.familias on af.IDFAMILIA equals f.IDFAMILIA
                             join e in _contexto.encargos on l.IDENCARGO equals e.IDENCARGO
                             where e.FECHAHORAENCARGOS >= _finder.FechaDe &&
                                e.FECHAHORAENCARGOS <= _finder.FechaA &&
                                e.FECHAHORARECOGERENCARGOS >= _finder.FechaRecogerDe &&
                                e.FECHAHORARECOGERENCARGOS <= _finder.FechaRecogerA &&
                                e.clientes.RAZONSOCIALCLIENTE.Contains(_finder.Cliente)
                         group new { l, e} by new  { l.IDARTICULO, l.CANTIDADLINEAENCARGO,a.DESCRIPCIONARTICULO,f.DESCRIPCION,f.IDFAMILIA }
                             into g
                                 select new { Result = new listaEncargosAgrupados
                             {
                                 IdArticulo=(int)g.Key.IDARTICULO,
                                 DescripcionArticulo=g.Key.DESCRIPCIONARTICULO,
                                 IdFamilia=g.Key.IDFAMILIA,
                                 DescripcionFamilia=g.Key.DESCRIPCION,
                                 SumaCantidad = (decimal)g.Sum(x => x.l.CANTIDADLINEAENCARGO),
                                 SumaPrecio = (decimal)g.Sum(x => x.l.PRECIOLINEAENCARGO),
                                 Total = (decimal)((decimal)g.Sum(x => x.l.CANTIDADLINEAENCARGO) * g.Sum(x => x.l.PRECIOLINEAENCARGO))
                             },
                             IDTIENDAs = new HashSet<int>(from x in g
                                                          let id = x.e.IDTIENDA
                                                          where id.HasValue
                                                          select  (int)id.Value)
});
...
if (_finder.IdTienda > 0)
{
    query = query.Where(x => x.IDTIENDAs.Contains (_finder.IdTienda));
}
var query1 = query.Select(x => x.Result);
var query=(来自l in _contexto.lineasencargos
在l.IDARTICULO上加入a_contexto.articulos等于a.IDARTICULO
将af加入a.IDARTICULO上的_contexto.articulofamilia等于af.IDARTICULO
将f加入到f上的家庭上下文中。f.IDFAMILIA等于f.IDFAMILIA
在l.IDENCARGO上的_contexto.encargos中加入e。IDENCARGO等于e.IDENCARGO
其中e.fechahorancargos>=\u finder.FechaDe&&
e、 fechahorancargos=\u finder.FechaRecogerDe&&
e、 Fechahora Recogerencargos x.l.Cantidadlineacargo),
SumaPrecio=(十进制)g.Sum(x=>x.l.preciolineancargo),
总计=(十进制)((十进制)g.Sum(x=>x.l.cantidadlineancargo)*g.Sum(x=>x.l.preciolineancargo))
},
IDTIENDAs=新哈希集(从g中的x开始)
设id=x.e.IDTIENDA
其中id.HasValue
选择(int)id.Value)
});
...
如果(_finder.IdTienda>0)
{
query=query.Where(x=>x.IDTIENDAs.Contains(_finder.IdTienda));
}
var query1=query.Select(x=>x.Result);

e
添加到分组语句中,并将
IDTIENDA
列表添加到结果中:

var query = (from l in _contexto.lineasencargos
                             join a in _contexto.articulos on l.IDARTICULO equals a.IDARTICULO
                             join af in _contexto.articulofamilia on a.IDARTICULO equals af.IDARTICULO
                             join f in _contexto.familias on af.IDFAMILIA equals f.IDFAMILIA
                             join e in _contexto.encargos on l.IDENCARGO equals e.IDENCARGO
                             where e.FECHAHORAENCARGOS >= _finder.FechaDe &&
                                e.FECHAHORAENCARGOS <= _finder.FechaA &&
                                e.FECHAHORARECOGERENCARGOS >= _finder.FechaRecogerDe &&
                                e.FECHAHORARECOGERENCARGOS <= _finder.FechaRecogerA &&
                                e.clientes.RAZONSOCIALCLIENTE.Contains(_finder.Cliente)
                         group new { l, e} by new  { l.IDARTICULO, l.CANTIDADLINEAENCARGO,a.DESCRIPCIONARTICULO,f.DESCRIPCION,f.IDFAMILIA }
                             into g
                                 select new { Result = new listaEncargosAgrupados
                             {
                                 IdArticulo=(int)g.Key.IDARTICULO,
                                 DescripcionArticulo=g.Key.DESCRIPCIONARTICULO,
                                 IdFamilia=g.Key.IDFAMILIA,
                                 DescripcionFamilia=g.Key.DESCRIPCION,
                                 SumaCantidad = (decimal)g.Sum(x => x.l.CANTIDADLINEAENCARGO),
                                 SumaPrecio = (decimal)g.Sum(x => x.l.PRECIOLINEAENCARGO),
                                 Total = (decimal)((decimal)g.Sum(x => x.l.CANTIDADLINEAENCARGO) * g.Sum(x => x.l.PRECIOLINEAENCARGO))
                             },
                             IDTIENDAs = new HashSet<int>(from x in g
                                                          let id = x.e.IDTIENDA
                                                          where id.HasValue
                                                          select  (int)id.Value)
});
...
if (_finder.IdTienda > 0)
{
    query = query.Where(x => x.IDTIENDAs.Contains (_finder.IdTienda));
}
var query1 = query.Select(x => x.Result);
var query=(来自l in _contexto.lineasencargos
在l.IDARTICULO上加入a_contexto.articulos等于a.IDARTICULO
将af加入a.IDARTICULO上的_contexto.articulofamilia等于af.IDARTICULO
将f加入到f上的家庭上下文中。f.IDFAMILIA等于f.IDFAMILIA
在l.IDENCARGO上的_contexto.encargos中加入e。IDENCARGO等于e.IDENCARGO
其中e.fechahorancargos>=\u finder.FechaDe&&
e、 fechahorancargos=\u finder.FechaRecogerDe&&
e、 Fechahora Recogerencargos x.l.Cantidadlineacargo),
SumaPrecio=(十进制)g.Sum(x=>x.l.preciolineancargo),
总计=(十进制)((十进制)g.Sum(x=>x.l.cantidadlineancargo)*g.Sum(x=>x.l.preciolineancargo))
},
IDTIENDAs=新哈希集(从g中的x开始)
设id=x.e.IDTIENDA
其中id.HasValue
选择(int)id.Value)
});
...
如果(_finder.IdTienda>0)
{
query=query.Where(x=>x.IDTIENDAs.Contains(_finder.IdTienda));
}
var query1=query.Select(x=>x.Result);

最后,我的问题的解决方案是在我的EF上下文中使用executestorequery,并创建SQL查询:

List<ListaEncargosAgrupados> lista;
string queryString = @"SELECT l.IDARTICULO,a.DESCRIPCIONARTICULO,f.DESCRIPCION descripcionFamilia,f.IDFAMILIA,sum(l.CANTIDADLINEAENCARGO) sumaCantidad,avg(l.PRECIOLINEAENCARGO) 

sumaPrecio,sum(l.CANTIDADLINEAENCARGO)*avg(l.PRECIOLINEAENCARGO) Total " +
    "FROM lineasencargos l,articulos a,articulofamilia af,familias f,encargos e " +
    "where a.IDARTICULO=l.IDARTICULO and a.IDARTICULO=af.IDARTICULO " +
    "and af.IDFAMILIA=f.IDFAMILIA and l.IDENCARGO=e.IDENCARGO ";


                if (_finder.IdTienda > 0)
                {
                    queryString = queryString + " and e.idtienda=" + _finder.IdTienda;
                }

                queryString = queryString + " group by l.IDARTICULO,a.DESCRIPCIONARTICULO,f.DESCRIPCION,f.IDFAMILIA order by a.DESCRIPCIONARTICULO ";

                var salidaQuery = _contexto.ExecuteStoreQuery<ListaEncargosAgrupados>(queryString).AsQueryable().ToList();
                lista = salidaQuery;
列表列表a;
string queryString=@“选择l.IDARTICULO、a.DescriptionActiculo、f.DescriptionDescriptionFamilia、f.IDFAMILIA、sum(l.CantidadlineanCargo)sumaCantidad、avg(l.PreciolineanCargo)
sumaPrecio,总计(l.Cantidadlineancargo)*平均(l.Preciolineancargo)总计”+
来自lineasencargos l、articulos a、Articulo Familia af、familias f、encargos e+
“其中a.IDARTICULO=l.IDARTICULO和a.IDARTICULO=af.IDARTICULO”+
“和af.IDFAMILIA=f.IDFAMILIA和l.IDENCARGO=e.IDENCARGO”;
如果(_finder.IdTienda>0)
{
queryString=queryString+”和e.idtienda=“+\u finder.idtienda;
}
queryString=queryString+“按l.IDARTICULO分组,a.DESCRIPCIONATICULO,f.DESCRIPCION,f.IDFAMILIA按a.DESCRIPCIONATICULO排序”;
var salidaQuery=_contexto.ExecuteStoreQuery(queryString.AsQueryable().ToList();
lista=salidaQuery;

最后,我的问题的解决方案是在我的EF上下文中使用executestorequery,并创建SQL查询:

List<ListaEncargosAgrupados> lista;
string queryString = @"SELECT l.IDARTICULO,a.DESCRIPCIONARTICULO,f.DESCRIPCION descripcionFamilia,f.IDFAMILIA,sum(l.CANTIDADLINEAENCARGO) sumaCantidad,avg(l.PRECIOLINEAENCARGO) 

sumaPrecio,sum(l.CANTIDADLINEAENCARGO)*avg(l.PRECIOLINEAENCARGO) Total " +
    "FROM lineasencargos l,articulos a,articulofamilia af,familias f,encargos e " +
    "where a.IDARTICULO=l.IDARTICULO and a.IDARTICULO=af.IDARTICULO " +
    "and af.IDFAMILIA=f.IDFAMILIA and l.IDENCARGO=e.IDENCARGO ";


                if (_finder.IdTienda > 0)
                {
                    queryString = queryString + " and e.idtienda=" + _finder.IdTienda;
                }

                queryString = queryString + " group by l.IDARTICULO,a.DESCRIPCIONARTICULO,f.DESCRIPCION,f.IDFAMILIA order by a.DESCRIPCIONARTICULO ";

                var salidaQuery = _contexto.ExecuteStoreQuery<ListaEncargosAgrupados>(queryString).AsQueryable().ToList();
                lista = salidaQuery;
列表列表a;
string queryString=@“选择l.IDARTICULO、a.DescriptionActiculo、f.DescriptionDescriptionFamilia、f.IDFAMILIA、sum(l.CantidadlineanCargo)sumaCantidad、avg(l.PreciolineanCargo)
sumaPrecio,总计(l.Cantidadlineancargo)*平均(l.Preciolineancargo)总计”+
来自lineasencargos l、articulos a、Articulo Familia af、familias f、encargos e+
“其中a.IDARTICULO=l.IDARTICULO和a.IDARTICULO=af.IDARTICULO”+
“和af.IDFAMILIA=f.IDFAMILIA和l.IDENCARGO=e.IDENCARGO”;
如果(_finder.IdTienda>0)
{
queryString=queryString+”和e.idtienda=“+\u finder.idtienda;
}
queryString=queryString+“按l.IDARTICULO分组,a.DESCRIPCIONATICULO,f.DESCRIPCION,f.IDFAMILIA按a.DESCRIPCIONATICULO排序”;
var salidaQuery=_contexto.ExecuteStoreQuery(queryString.AsQueryable().ToList();
lista=salidaQuery;

listaEncargosAgrupados是类,listaEncargosAgrupados类必须包含在group by子句中的_context.encargos中可用的IDTIENDA项SADD IDTIENDA,以便您可以在最终选择投影中将其作为listaEncargosAgrupados的公共属性进行投影。将group by子句更改为-
group l by new{l.IDARTICULO,l.CANTIDADLINEAENCARGO,a.DESCRIPCIONATICULO,f.DESCRIPCION,f.IDFAMILIA,e.IDTIENDA}
我不喜欢group by中的IDTIENDA,我只需要将其保留在.listaEncargosAgrupados为class且listaEncargosAgrupados为mu的子句中