2015-06-12 48 views
3

我只是將這些數據發送到Asp.net MVC5中的報表引擎(SSRS)。
一切都很好,但這個查詢花了很多時間,因爲我必須循環通過ListProducts(我猜ListProducts是數據庫匹配的大小)。其中列表中包含任何列表

我只是在尋找一種方法來優化這個查詢。

我試過anycontains(如下圖所示),但它們似乎不適用於單個表格。

context.Products.Where(w => w.ProductDetail.Any(a => a.startDate >= startDate 
                && a.endDate <= endDate)) 

我得到這個從here

2)我試圖this as well

context.Products.Where(w => ListProducts.Any(x =>w.Contains(x))) 

但這也不能正常工作,並生成一個編譯時錯誤

的System.Guid不包含'Contains'的定義

有沒有其他方法,或者我正在做它唯一正確的方法?

foreach (var item in ListProducts) 
{ 
    List.AddRange(_context.Products.Where(w => w.ProductId== item).Select(q => new ProductVM 
    { 
     Name = q.Name, 
     Quantity = q.Quantity, 

    }).ToList().Select(item=> new ProductVM 
    { 
      Name = item.Name, 
     Quantity = item.Quantity, 
    }).ToList()); 
} 


public class Product 
{ 
    public Nullable<System.Guid> ProductId { get; set; } 
    public string Name { get; set;} 
    public decimal Quantity { get; set; } 
} 
+0

在你可能想提供一個定義或Product'的'POCO最起碼的。可以推斷,但是你讓人們做更多的分析工作,而不是解決其他非常簡單的問題。 – nathanchere

+1

你必須使用LINQ嗎?如何通過'_context'執行Raw SQL,以便優化查詢。你甚至可以使用像Dapper這樣的ORM,它會很好地爲你繪製你的對象。非常強大的工具,速度也非常快。有一個數據結構可以很好,所以我可以看到這一切如何在數據庫中聯繫起來。 – scgough

+0

其實我沒有提供原始的類和數據,由於一些限制,但我已經做出了基於這些類的例子,數據庫的實際設計是相當複雜的,但我已經做了一個簡單的例子,以便快速理解,所以你可以把它作爲一個產品類具有像名稱數量少的屬性,我只是想獲得數據,如問題中所解釋的..如果需要更多的解釋,然後隨意問 – Dragon

回答

0

好吧,你可以這樣做:

var thelist = _context.Products.Where(n => ListProducts.Contains(n.ProductId)).Select(n => new ProductVM 
{ 
    Name = n.Name, 
    Quantity = n.Quantity 
}).ToList(); 
+0

爲什麼在第二個例子中混合查詢和方法格式?查詢格式也需要一個'select'。 – juharr

+0

編輯@juharr - 你是對的!一直在大聲思考。:) – scgough

+0

第一個給出此錯誤..錯誤'System.Collections.Generic.List .Contains(System.Guid)'的最佳重載方法匹配有一些無效的參數 – Dragon

相關問題