Linq EF中的子查询噩梦

Linq EF中的子查询噩梦,linq,entity-framework,Linq,Entity Framework,除了LINQ(例如SQL!),我还真的在为一个简单的查询而苦苦挣扎 我有两个实体: Product ProductApprover 产品实体与ProductApprover实体之间存在一对多关系,例如: Product.ProductApprovers为我提供与产品相关的所有ProductApprover实体 当通过我的ProductID列查询我的产品实体时,获取产品和关联的ProductApprover数据非常简单,因为关联的ProductApprover数据会自动绑定到结果中,但当我想通过

除了LINQ(例如SQL!),我还真的在为一个简单的查询而苦苦挣扎

我有两个实体:

Product
ProductApprover
产品实体与ProductApprover实体之间存在一对多关系,例如:

Product.ProductApprovers为我提供与产品相关的所有ProductApprover实体

当通过我的ProductID列查询我的产品实体时,获取产品和关联的ProductApprover数据非常简单,因为关联的ProductApprover数据会自动绑定到结果中,但当我想通过查询关联的ProductApprover实体内的数据来更改查询时,问题就来了。我尝试了各种各样的使用“Where”、“Contains”和“Any”函数来执行子查询,但似乎无法得到我想要的结果

我要执行的查询是:

SELECT * FROM Product p
INNER JOIN ProductApprover pa ON p.ProductId = pa.ProductId
WHERE p.ProductId = @id AND pa.Version = @version

有人能帮我吗?提前谢谢你。

我想你想要这样的东西:

var query = from product in db.Products
            where product.ProductId == productId
            select new { 
                Product = product,
                Approvers = product.Approvers.Where(pa => pa.Version == version)
            };
如果这不符合您的要求,您能解释一下它的下落吗?

试试这个(我想这是SQL查询的LINQ解释):


我认为这不是你实际拥有的(你在产品和审批人之间有“一对多”的关系,在我的查询中,他们基本上是不相关的),但这可能会让你对如何编写查询有一些想法。谢谢,这很有效,但不幸的是,我需要返回原始对象(产品),包含此实例的同一对象中的ProductApprover数据。我没有充分解释是我的错,不过还是要谢谢你。
int id = 123;
int version = 555;

var results = from p in context.Products 
              join pa in context.ProductApprovers 
              on p.ProductId = pa.ProductId 
              where p.ProductId equals id && pa.Version equals version
              select new { Product = p, Approver = pa };