有没有办法让这个Linq to entities以另一种方式(更好地)查询,并理解我做了什么?
首先,我可以要第一部分(select(p => new {...)中的string.jon()吗?
其次,为什么要让string.join()正常工作,第一个select必须以.ToList()结尾?
表之间的关系如下:

下面是代码:
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发布于 2013-06-26 06:06:08
对我来说,查询看起来很好。
不能将string.Join方法移动到第一个Select的原因是,LINQ- to -Entities最终必须能够转换为SQL。string.Join没有直接翻译成SQL,所以它不知道如何把你的LINQ查询翻译成SQL。通过首先调用ToList(),您可以将第一个Select的结果放入内存,在内存中,后续的Select使用Linq-to-Objects。由于Linq- to -Objects不需要转换为SQL,因此它可以直接对内存中第一个查询的结果进行操作。
通常,您可能希望在ToList()调用之前将最好留给SQL的所有内容(如过滤、排序、平均、分组等)放在SQL中,而将无法转换为SQL(或转换效率较低)的额外工作留到将结果引入本地内存之后。
https://stackoverflow.com/questions/17308161
复制相似问题