Sql 如何编写涉及多对多表的最小linq查询?
Product和ProductCategory表通过多对多表ProductToCategory连接 对于某些带有idlet的产品,请将其标记为product_1,我需要获得与product_1相同类别的下一个产品 我想用一个查询来完成这项工作,所以下面的查询可以完成这项工作,但是sql分析器显示了非常庞大的查询。有没有关于如何重写查询的建议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
(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();