1

だから私はEFを使用しています、私は次のエンティティを持っています:

  • Website
  • Sector
  • Product
  • Attribute
  • AttributeTag

関係は次のとおりです。

ここに画像の説明を入力

テーブルに直接リンクされていないものを取得する必要があります。Sectorなどを使用して特定のものだけを取得するためにオブジェクトが必要な製品Productsなどsector.Products

しかし、親の代わりにProducts特定の配下のすべてを取得する必要がある場合はどうすればよいでしょうか?WebsiteSector

私の特定の状況では、私の質問は次のとおりです。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

スキーマ内の関係が経路を形成します。2 つのエンティティ セット間の関係を把握したい場合は、その経路をたどって、間にあるすべてのエンティティをクエリする必要があります。

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 に答える