我有一个数据库表中的记录列表,通过比较第一个表搜索结果中的每个记录,我应该使用什么查询来从另一个表中获取记录。
我正在使用foreach循环来比较第二个表的每个记录。有没有办法直接使用Entity Framework?
/// 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);
}
答案 0 :(得分:0)
请试用此代码:
var areaIds = areas.Select(a => a.Id).ToArray();
prods = db.Products.Where(r => areaIds.Contains(r.AreaId));
如果您使用的是EF 4或更高版本, Contains
方法将有效。
答案 1 :(得分: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))
我确信有一种更好的方法可以使用连接,但这是您现在最接近的方式,并且您不会为每个区域生成查询。程序