首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq to Entities查询说明

Linq to Entities查询说明
EN

Stack Overflow用户
提问于 2013-06-26 05:47:17
回答 1查看 62关注 0票数 0

有没有办法让这个Linq to entities以另一种方式(更好地)查询,并理解我做了什么?

首先,我可以要第一部分(select(p => new {...)中的string.jon()吗?

其次,为什么要让string.join()正常工作,第一个select必须以.ToList()结尾?

表之间的关系如下:

下面是代码:

代码语言:javascript
复制
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)
                })

结果是这样(这是我预期的结果):

代码语言:javascript
复制
IEnumerable<> (17 items)   
**Id--  Code--  Cant--  Name--  Pric--  Categ**

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 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(或转换效率较低)的额外工作留到将结果引入本地内存之后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17308161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档