【发布时间】:2017-08-03 03:05:19
【问题描述】:
我正在尝试获取单个产品的所有图像和项目符号点。图片和 Bullet_Points 有外键 Product_ID 供参考。但是,即使我只有 8 个 bullet_points ,单个产品的 5 个图像,我总共得到 40 行。我做错了什么?
下面是我正在执行的 linq 查询。
from p in Products
from i in Images
from s in Specifications
where p.ProductID==i.Product_ID && p.ProductID==5002
where p.ProductID==s.Product_ID && p.ProductID==5002
select new { p.ProductID,i.Image_URL,s.Bullet_Point}
【问题讨论】:
-
您希望在单个查询中同时接收
Images和Specifications。这导致关系乘法,因此记录数变为8 * 5 = 40。尝试进行 2 个单独的查询,一个用于Images,另一个用于Specifications。 -
也许您只想获取
Product的一条记录以及Images和Specifications的两个相关集合? -
是的,你是对的。一个产品有多个图像和多个子弹点与外键绑定。我可以在一个查询中检索所有这些而不重复。@IvanGritsenko 或者我应该更改建筑?
-
@Arun3x3 架构和您的查询一样好。您只是无法在一个请求中得到您想要的。一张表只有 2 个维度,因此您的查询结果完全符合 Ivan Gritsenko 的解释。如果您删除重复的条目,您将丢失图像信息。所以实际上没有重复的行。所以这里两个查询是最好的解决方案。
-
感谢您的回复@Sebi。我可以将其安排在两个查询中,但问题在于要查看的模型的上下文中。我如何将两个查询作为一个视图对象发送到视图,因为我想传递信息以便可以显示和编辑它。
标签: c# linq linq-to-sql asp.net-mvc-5