2014-04-22 177 views
0

我有一個來自數據庫表的記錄列表,通過比較來自第一個表搜索結果的每條記錄,我應該使用什麼查詢來從另一個表中獲取記錄。通過比較另一個記錄列表來搜索記錄

我使用foreach循環來比較每個記錄形式第二個表。有沒有辦法直接使用實體框架?

  /// Get all Areas for each program in the survey 
     /// 
     if (programs.Count() > 0) 
     { 
      foreach (var program in programs) 
      { 
       var a = db.Areas.Where(r => r.ProgramId == program.Id); 

       areas.AddRange(a); // Storing areas in list 
      }  
     } 

     // Get all products for each area 
     foreach (var a in areas) 
     { 
      var ids = db.Products.Where(r => r.AreaId == a.Id); 
      prods.AddRange(ids); 
     } 
+1

使用內部連接查詢 –

+0

爲了使爲了能夠幫助您,您需要提供一些關於您正在搜索的對象類型的細節,以及您用於比較的對象。請顯示您迄今爲止嘗試過的一些代碼。截至目前,我們不知道從哪裏開始。 – krillgar

+0

所以你試過 – Bit

回答

0

1)使用你的程序的實體

if (programs.Count() > 0) 
{ 
    var progrmIds = programs.Select(e => e.Id).ToArray(); 
    var areasResult = db.Areas.Where(r => programIds.Contains(r.ProgramId)); 
    areas.AddRange(areasResult); // Storing areas in list 
} 

2)選擇產品基地的收集上的區域

var areaIds = areas.Select(e => e.Id).ToArray(); 
var allProductsByAreas = db.Products.Where(r =>reaIds.Contains(r.AreaId)) 

我肯定有一個更好的方法與加入做選擇的區域,但這是最接近你現在所擁有的方式,並且你不會爲每個區域生成查詢&程序

0

試試這個代碼,請:

var areaIds = areas.Select(a => a.Id).ToArray(); 
prods = db.Products.Where(r => areaIds.Contains(r.AreaId)); 

Contains方法,如果你正在使用EF 4或更高的工作。