Sql 如何编写涉及多对多表的最小linq查询?

Sql 如何编写涉及多对多表的最小linq查询?,sql,linq,entity-framework-4,linq-to-entities,Sql,Linq,Entity Framework 4,Linq To Entities,Product和ProductCategory表通过多对多表ProductToCategory连接 对于某些带有idlet的产品,请将其标记为product_1,我需要获得与product_1相同类别的下一个产品 我想用一个查询来完成这项工作,所以下面的查询可以完成这项工作,但是sql分析器显示了非常庞大的查询。有没有关于如何重写查询的建议 (from p in cxt.Products join c in cxt.ProductToCategories on p.Id equals c.Pr

Product和ProductCategory表通过多对多表ProductToCategory连接

对于某些带有idlet的产品,请将其标记为product_1,我需要获得与product_1相同类别的下一个产品

我想用一个查询来完成这项工作,所以下面的查询可以完成这项工作,但是sql分析器显示了非常庞大的查询。有没有关于如何重写查询的建议

(from p in cxt.Products
 join c in cxt.ProductToCategories on p.Id equals c.ProductId
 where p.Id > id && c.CategoryId == (from p2 in cxt.Products
                                     join c2 in cxt.ProductToCategories on p.Id equals c.ProductId
                                     where p2.Id == id
                                     select c2.CategoryId).FirstOrDefault()
 orderby p.Id
 select p).FirstOrDefault();

注:我想是什么时候说的

我需要得到与产品1相同类别的下一个产品

真正的意思是

我需要得到产品1的一个类别的下一个产品


我建议您在数据库中创建一个名为NextProductInCategory的视图,然后使用一个简单的linq查询来检索所需内容。

请,发布数据样本,因为这似乎有点模棱两可:它们是产品和类别之间的m:n关系,您谈论的是“同一类别的下一个产品”同一类别意味着1个类别,但这是一个m:n,那么它们不止一个category@aF.谢谢你改进了语法。
(from p in ctx.Products
join c in cts.ProductsToCategories on c.ProductId 
join c2 in cts.ProductsToCategories on c.CategoryId = c2.CategoryId 
join p2 in ctx.Products on c2.ProductId = p2.id
where 
  p2.Id == id &&
  p2 != p
orderby p).FirstOrDefault();