1

我在多对多关系中有三个表。这些是:

  • t033_region
  • t031_geocode
  • t032_region_to_geocode_mapping

我正在使用带有 IQueryable GetItems() 的实体框架和存储库模型。如何检索给定区域 id (t033) 的所有地理编码 (t031) 条目?我实际上想说:

select * from t031_geocode where t031_id in (select t031_id from t032_region_to_geocode_mapping where t033_id = @RegionId)

但是使用实体框架和 LINQ 怎么说呢?我想它开始于:

var data = _repository.GetItems<t031_geo_code>().Where(g => ???);

但是,在 Where 子句中执行上述操作的表达式是什么?还是有更好的方法来完成我正在做的事情?

4

2 回答 2

4

我通常做这种事情的方式是首先获取您想要匹配的 id 列表,然后获取与这些 id 匹配的记录子集,例如:

var ids = _repository.Get<t032_region_to_geocode_mapping>().Where(x => x.t33_id = @RegionId).Select(x => x.t03_id).ToList();

var data = _repository.Get<t031_geocode>().Where(x => ids.Contains(x.t031_id);
于 2013-10-29T11:49:21.313 回答
0

这取决于您的存储库实施?!

这里应该是这样的:

var regionKeyOrKeys = new int []{XX};
var codes = (from region in t031_geocode.GetAllItems..// Get all items no problem here! because of 
          where (regionKeyOrKeys.Contains(region.Key)) 
          select region).ToList();
于 2013-10-29T12:01:58.167 回答