2

我正在使用实体框架 6.1.0 和 LINQ to SQL

我的对象图:

市场 1...n MarketAsset n...n 公司市场 n...1 公司

所以,

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 回答