通过比较另一个记录列表来搜索记录

时间:2014-04-22 19:35:27

标签: c# entity-framework

我有一个数据库表中的记录列表,通过比较第一个表搜索结果中的每个记录,我应该使用什么查询来从另一个表中获取记录。

我正在使用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);
        }

2 个答案:

答案 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))

我确信有一种更好的方法可以使用连接,但这是您现在最接近的方式,并且您不会为每个区域生成查询。程序