LINQ查询检索项目

时间:2012-10-22 07:50:10

标签: c# asp.net sql linq entity-framework

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

  • Website
  • Sector
  • Product
  • Attribute
  • AttributeTag

关系如下:

enter image description here

我需要检索一些与表没有直接关联的东西。例如,需要Sector对象的产品才能使用Products等内容检索特定的sector.Products

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

在我的具体情况下,我的问题是: 1)如何检索给定特定website_id的所有产品 - (忽略该部门) 2)如何检索具有特定tag_id + website_id的所有产品。 (还检索相应的Attribute

帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

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

您将在产品实体中拥有List<Sector> SectorList

您将在Sector Entity中拥有List<Product> ProductList

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

您将在Sector Entity

中拥有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>)
                     );

答案 1 :(得分: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 };

如果我正确理解您的架构,那么应该下拉数据以回答问题的两个部分。