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