0

有什么办法可以让这个 Linq 以另一种方式(更好)查询实体并理解我做了什么?

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

其次,为什么我需要第一个选择以结束.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
4

1 回答 1

0

该查询对我来说看起来不错。

您不能将string.Join方法移至 first的原因Select是 LINQ-to-Entities 最终必须能够转换为 SQL。string.Join没有直接转换为 SQL,因此它不知道如何将您的 LINQ 查询转换为它。通过首先调用ToList(),您将第一个的结果Select带入内存,随后将在其中Select使用 Linq-to-Objects。由于 Linq-to-Objects 不需要翻译成 SQL,所以可以直接对内存中第一次查询的结果进行操作。

通常,您会希望在调用之前将所有最好留给 SQL的工作ToList()(例如过滤、排序、平均、分组等),并留下无法转换为 SQL 的额外工作(或者不是这样做很有效),因为在结果被带入本地内存之后。

于 2013-06-25T22:06:07.920 回答