1

所以我使用的是 EF,我有以下实体:

  • Website
  • Sector
  • Product
  • Attribute
  • AttributeTag

关系如下:

在此处输入图像描述

我需要检索不直接链接到表的东西。例如产品需要一个Sector对象以便仅Products使用诸如sector.Products.

但是如果我需要Products在给定Website而不是它的父项下检索所有内容Sector怎么办?

在我的具体情况下,我的问题是:1)如何检索给定特定website_id- 的所有产品(不考虑部门)2)如何检索具有特定tag_id+的所有产品website_id。(也检索它的对应Attribute

帮助表示赞赏。谢谢!

4

2 回答 2

2

假设您有两个侧面导航属性:

您将拥有一个List<Sector> SectorList产品实体。

您将拥有一个List<Product> ProductList部门实体。

sectors_products不会作为实体出现,因为它在对象世界中不需要)。

您将拥有一个Website Website行业实体

您将拥有一个List<AttributeTag> AttributeTagList产品实体;

products_tags不会作为实体出现,因为它在对象世界中不需要)。

1)类似:

var result = ProductEntities
             .Where(p => p.SectorList
                         .Any(s => s.WebSite.Id == <your_website_id>)
                    );

2)类似(以1)作为基本查询)

result = result
         .Where(p => p.AttributeTagList
                     .Any(at => at.Id == <your_tag_id>)
               );

或多合一

var result = ProductEntitites
              .Where(p => 
                        p.SectorList.Any(s => s.WebSite.Id == <your_website_id>) &&
                        p.AttributeTagList.Any(at => at.Id == <your_tag_id>)
                     );
于 2012-10-22T08:02:20.367 回答
1

架构中的关系形成了一条路径。如果您想弄清楚两个实体集之间的关系,您必须遵循该路径并查询其间的所有实体。

var part1 = (from w in Websites
             from s in Sectors
             from p in s.Products
             where s.Website equals w
             && w.website_id equals web_id
             select p).Distinct();

var part2 = from p in part1
            let attr = p.Attributes.Where(a => a.tag_id + web_id == target_val)
            where attr.Any()
            select new { p, attr };

如果我正确理解了您的架构,那应该会提取数据来回答您问题的两个部分。

于 2012-10-22T08:22:23.727 回答