2012-02-04 47 views
0

我在寫一個linq查詢時遇到了一些麻煩。在一個linq查詢中使用.Contains返回一個SystemException

我有列表A的產品已被修改,所以我試圖從數據庫中獲取產品列表,以允許我應用更改。

我試圖2個不同的查詢

var query = from p in db.Products 
       where products.Select(z => z.id).Contains(p.Id) 
       select p; 

     var query2 = from p in db.Products where (from o in products 
        select o.id) 
        .Contains(p.Id) 
        select p; 

兩種嘗試返回錯誤

基{System.SystemException} = {「無法創建類型的恆定值「ProjectABC.Models .ProductModel'。在這種情況下,只支持原始類型(如Int32,String和Guid)。「}

我在做什麼錯?

回答

2

我前幾天有同樣的問題,似乎EF不支持Select()。Contains()而沒有給出該錯誤。在經過一段時間的測試之後,我最終將它分解成與你的情況相對應的東西;

var IDs = products.Select(z=>z.id); 
var query = from p in db.Products 
      where IDs.Contains(p.Id) 
      select p; 

這在我的情況下工作良好,當「產品」收集是在內存反正(即ToList()從數據庫'編結果)

+0

感謝約阿希姆的作品。 – 2012-02-04 22:31:36

相關問題