2013-06-25 184 views
0

有沒有什麼辦法可以讓Linq以另一種方式查詢實體(更好)並理解我做了什麼?Linq to Entities查詢說明

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

二,爲什麼我需要首先選擇以.ToList()結尾的string.join()才能正常工作?

的表關係如下:

enter image description here

這裏是代碼:

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 

回答

0

該查詢對我來說很好。

您無法將string.Join方法移至第一個Select的原因是,LINQ-to-Entities最終必須能夠轉換爲SQL。 string.Join沒有直接翻譯成SQL,所以它不知道如何翻譯你的LINQ查詢。首先調用ToList(),將第一個Select的結果帶入內存中,其後Select與Linq-to-Objects一起使用。由於Linq-to-Objects不需要轉換爲SQL,它可以直接對內存中的第一個查詢的結果進行操作。

一般情況下,你會希望把一切會更好留給SQL ToList()調用(如過濾,分類,平均,分組等),並留下無法轉換的額外工作到SQL(或不如此高效),以便將結果帶入本地內存之後。

+0

我真的很感謝你的時間來回答這個問題。我很高興在第一個問題上得到支持。非常感謝來自洪都拉斯。我不能投票,它說15聲望,但謝謝。 –