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

本文关键字:记录 列表 搜索 另一个 比较 | 更新日期: 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方法将起作用。