![](/img/trans.png)
[英]With DevForce Ideablade, how do I determine if a related entity has been removed from an entity?
[英]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.