0

この Linq to entity クエリを別の方法で (より良い) 作成し、自分が何をしたかを理解する方法はありますか?

まず、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メソッドを最初のに移動できない理由Selectは、LINQ-to-Entities が最終的に SQL に変換できる必要があるためです。string.Joinには SQL への直接変換がないため、LINQ クエリを SQL に変換する方法がわかりません。最初に呼び出すことToList()で、最初の結果をSelectメモリに取り込み、その後Selectは Linq-to-Objects で動作します。Linq-to-Objects は SQL に変換する必要がないため、メモリ内の最初のクエリの結果を直接操作できます。

一般に、呼び出しのに SQL に任せたほうがよいすべてのものToList()(フィルタリング、並べ替え、平均化、グループ化など) を置き、SQL に変換できない (または変換されない) 追加の作業を残します。結果がローカルメモリに取り込まれた後。

于 2013-06-25T22:06:07.920 に答える