c# - Entity Framework LINQ 多对多查询

标签 c# sql linq entity-framework

我有三个多对多关系的表。它们是:

  • t033_地区
  • t031_geocode
  • t032_region_to_geocode_mapping

我正在将 Entity Framework 和存储库模型与 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)

但是我该如何使用 Entity Framework 和 LINQ 来表达呢?我想它开始于:

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

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

最佳答案

我通常做这种事情的方式是首先获取您想要匹配的 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);

关于c# - Entity Framework LINQ 多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657291/

相关文章:

sql - SQL Server-使用IF EXISTS一次删除多列

php - 使用PHP在SQLite中实现SQL AES ENCRYPTION

.net - Linq2Sql 与存储过程

C# LINQ - 如何动态构建 Group By 子句

c# - 外部VS2013构建错误 "error MSB4019: The imported project <path> was not found"

c# - 无法通过通用名称从 C# 中的存储中获取证书

c# - 将 DataGridView 绑定(bind)到 DataTable,但还包括 ComboBox 作为最后一列

c# - 使用 GROUP 和 SUM 的 LINQ 查询

c# - LINQ 到实体 : Removing special characters inside the "where" expression

c# - 如何实现事件