通过比较另一个记录列表来搜索记录
本文关键字:记录 列表 搜索 另一个 比较 | 更新日期: 2023-09-27 17:59:41
我有一个数据库表中的记录列表,通过比较第一个表搜索结果中的每条记录,我应该使用什么查询来从另一个表中获取记录。
我使用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)使用程序实体的集合选择区域
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))
我相信有一种更好的方法来处理联接,但这是最接近您现在所拥有的方法,并且您不会为每个区域生成查询&程序
请尝试此代码:
var areaIds = areas.Select(a => a.Id).ToArray();
prods = db.Products.Where(r => areaIds.Contains(r.AreaId));
如果您使用EF 4或更高版本,Contains
方法将起作用。