繁体   English   中英

如何使用Entity Framework和LINQ to SQL和LinqKit PredicateBuilder或IdeaBlade DevForce过滤相关数据

[英]How to filter related data using Entity Framework and LINQ to SQL and LinqKit PredicateBuilder Or IdeaBlade DevForce

我正在使用Entity Framework 6.1.0和LINQ to SQL

我的对象图:

市场1 ... n市场资产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。

先感谢您。

最好的祝愿,Marco Alves。

这很丑陋,但应该适合您的情况。 EF应该将此转换为相对有效的查询。

        db.Markets.Where(mrkt =>
            mrkt.MarketAssets.Any(ma =>
                ma.CompanyMartkets.Any(cm =>
                    cm.Company.Guid == yourFilterGuid))).ToList();

在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文档,以获取有关动态查询的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM