【问题标题】:Searching records by comparing another list of records通过比较另一个记录列表来搜索记录
【发布时间】:2014-04-22 19:35:27
【问题描述】:

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

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

【问题讨论】:

  • 为了让任何人都能够帮助您,您需要提供一些关于您正在搜索的对象类型、您用来比较的对象的详细信息。请显示一些您迄今为止尝试过的代码。到目前为止,我们不知道从哪里开始。
  • 那么你尝试了什么
  • 尝试使用 Contains 方法。它非常强大,但在实体方面使用不足。

标签: c# entity-framework


【解决方案1】:

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

我确信有更好的方法来使用连接,但这是最接近您现在拥有的方法,您不会为每个区域和程序生成查询

【讨论】:

    【解决方案2】:

    请试试这个代码:

    var areaIds = areas.Select(a => a.Id).ToArray();
    prods = db.Products.Where(r => areaIds.Contains(r.AreaId));
    

    Contains 方法将在您使用 EF 4 或更高版本时起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2018-09-07
      • 2011-10-12
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多