2011-08-22 59 views
1

我在表Installation上執行查詢以獲取查詢不同數據庫上的表Product所需的Id列表(在問你之前,必須這樣) ,無法跨數據庫進行查詢)。下面是列表的樣子:LinqToSql:從查詢中使用的列表中選擇字段

var prods = (from p in context.Product 
      where installs.Select(i => i.ProductId).Contains(p.ProductId) 
      select new 
      { 
       ProductNumber = p.ProductNumber 
       // How do I get InstallationId from installs?? 
      }).ToList(); 

我需要知道的是:

class Installation 
{ 
    Guid InstallationId 
    Guid ProductId 
} 

List<Installation> installs; 

我不給Product表看起來像這樣使用這個列表中查詢有任何問題我如何從列表中檢索InstallationId並將其存儲在新列表中?

在此先感謝。

回答

0

傑森的回答有輕微的重構,以允許LinqToSql例外。

var products = (from product in context.Product     
       where installs.Select(i => i.ProductId).Contains(p.ProductId) 
       select product).ToList() 

var installedProducts = (from product in products 
         join install in installs 
         on install.ProductId equals product.ProductId 
         select new 
         { 
          ProductNumber = product.ProductNumber, 
          InstallationId = install.InstallationId 
         }).ToList(); 
+0

謝謝。創建單獨的產品清單是關鍵。我對Jason投了贊成票,但是自從你提供了缺失的部分之後給了你答案。 – CAbbott

3

你應該做一個加入

var products = (from product in context.Product 
       join install in installs 
        on install.ProductId equals product.ProductId 
       select new { 
        ProductNumber = product.ProductNumber 
        InstallationId = install.InstallationId 
       } 
       ).ToList(); 
+0

對不起,沒有喜悅:'本地序列不能在LINQ被用來查詢經營者的SQL實現除包含operator.' – CAbbott

+0

@CAbbott:然後使用您的查詢,以拉動產品進入內存中的列表(只需更換你可以用'select'選擇''select'',用'ToList'將該查詢的結果帶入內存,然後加入所得到的'List '而不是'context.Product'。 – jason

相關問題