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_Entities - Fatal编程技术网

Linq到实体查询解释

Linq到实体查询解释,linq,entities,Linq,Entities,有什么方法可以让这个LINQtoEntities查询以另一种方式更好地理解我所做的吗 首先,我可以使用第一部分中的string.jon selectp=>new{ 第二,为什么我需要第一个select以.ToList结尾,以使string.join起作用 表关系如下所示: 代码如下: Productos.Select(p => new { Id = p.Id, Code = p.CodigoProd,

有什么方法可以让这个LINQtoEntities查询以另一种方式更好地理解我所做的吗

首先,我可以使用第一部分中的string.jon selectp=>new{

第二,为什么我需要第一个select以.ToList结尾,以使string.join起作用

表关系如下所示:

代码如下:

Productos.Select(p => new { 
                  Id = p.Id,
                  Code = p.CodigoProd,
                  Name = p.Nombre,
                  Cant = p.Inventario.Sum(i => i.Cantidad),
                  Pric = p.Inventario.OrderBy(i => i.Precio).Select (i => i.Precio).FirstOrDefault(),
                  cate =  p.ProductosXCategoria.Select(pc => pc.CategoriasdeProducto.Nombre)
                }).Where (p => p.Cant != null).ToList()
                .Select (r => new {
                    r.Id, r.Code, r.Cant, r.Name, r.Pric, Categ = string.Join("-",r.cate)
                })
结果是,这是我期望的结果:

IEnumerable<> (17 items)   
**Id--  Code--  Cant--  Name--  Pric--  Categ**

1-- AXI--   30--    Pepsi-- 10--    Granos

3-- ASI--   38--    Carne blanca--  12--    Granos-Limpieza

我觉得这个问题很好

无法将string.Join方法移动到第一个Select的原因是LINQ to Entities最终必须能够转换为SQL.string.Join无法直接转换为SQL,因此它不知道如何将LINQ查询转换为它。通过首先调用ToList,可以将第一个Select的结果带到内存中,然后t Select与Linq to对象一起工作。由于Linq to对象不需要转换为SQL,因此它可以直接对内存中第一个查询的结果进行操作


通常,您希望在ToList调用之前将所有更好的工作(如筛选、排序、平均、分组等)都放在SQL中,并在将结果放入本地内存后,将无法转换为SQL或效率不高的额外工作留给SQL。

非常感谢您抽出时间回答这个问题。我非常高兴在我的第一个问题中得到支持。非常感谢洪都拉斯。我不能投票,它说15,但谢谢。