2

Entity Framework 6.1.0 と LINQ to SQL を使用しています

私のオブジェクトグラフ:

Market 1...n MarketAsset n...n CompanyMarket n...1 Company

そう、

Market has a Collection of MarketAsset called MarketAssets
MarketAsset has a collection of CompanyMarket called CompanyMarkets
CompanyMarket has a property name callled Company
Company has a string property called Guid. 

私の質問は、Company.Guid プロパティをフィルタリングする必要があることを考慮して、会社が運営するすべての市場のリストを取得するにはどうすればよいですか?

PS1: マーケットのみを返品したい。他の関連エンティティを結果セットに含めたくありません。

PS2: IdeaBlade DevForce も使用しています。

前もって感謝します。

最高の願い、マルコ・アルベス。

4

2 に答える 2

1

これは醜いですが、あなたのケースではうまくいくはずです。EF は、これを比較的効率的なクエリに変換する必要があります。

        db.Markets.Where(mrkt =>
            mrkt.MarketAssets.Any(ma =>
                ma.CompanyMartkets.Any(cm =>
                    cm.Company.Guid == yourFilterGuid))).ToList();
于 2014-05-16T20:49:34.943 に答える
0

DevForceでこれを試してください

  var query = mgr.Companies.Where(comp => comp.Guid.Equals(searchGuid))
    .SelectMany(comp => comp.CompanyMarkets)
    .SelectMany(cMkt => cMkt.MarketAssets)
    .Select(mAsset => mAsset.Market);

  var results = await query.ExecuteAsync();

  results = results.Distinct();

DevForce の PredicateBuilder を使用する場合、コードは次のようになります。

  var p1 = PredicateBuilder.Make(typeof(Company), "Guid", FilterOperator.IsEqualTo, searchGuid);
  var selector1 = new ProjectionSelector("CompanyMarkets");
  var selector2 = new ProjectionSelector("MarketAssets");
  var selector3 = new ProjectionSelector("Market");

  var rootQuery = EntityQuery.Create(typeof(Company), mgr2);

  var dynamicQuery = rootQuery
    .Where(p1)
    .SelectMany(selector1)
    .SelectMany(selector2)
    .Select(selector3);

動的クエリの詳細については、 http: //drc.ideablade.com/devforce-2012/bin/view/Documentation/dynamic-queries で DevForce のドキュメントを確認することをお勧めします。

于 2014-05-16T23:55:40.503 に答える