2014-04-22 121 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或更高的工作。