Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用实体框架和LINQ to SQL以及LinqKit PredicateBuilder或IdeaBlade DevForce筛选相关数据_C#_Linq_Entity Framework_Predicatebuilder_Devforce - Fatal编程技术网

C# 如何使用实体框架和LINQ to SQL以及LinqKit PredicateBuilder或IdeaBlade DevForce筛选相关数据

C# 如何使用实体框架和LINQ to SQL以及LinqKit PredicateBuilder或IdeaBlade DevForce筛选相关数据,c#,linq,entity-framework,predicatebuilder,devforce,C#,Linq,Entity Framework,Predicatebuilder,Devforce,我正在使用EntityFramework6.1.0和LINQtoSQL 我的对象图: 市场1…n市场资产n…n公司市场n…1公司 所以 我的问题是:考虑到我需要过滤Company.Guid属性,如何获取公司运营的所有市场的列表 PS1:我只想返回市场。我不想在结果集中包含任何其他相关实体 PS2:我也在使用IdeaBlade DevForce 先谢谢你 最好的威士忌, 马可·阿尔维斯。这很难看,但应该适合你的情况。EF应该将此转换为一个相对高效的查询 db.Markets.Whe

我正在使用EntityFramework6.1.0和LINQtoSQL

我的对象图:

市场1…n市场资产n…n公司市场n…1公司

所以

我的问题是:考虑到我需要过滤Company.Guid属性,如何获取公司运营的所有市场的列表

PS1:我只想返回市场。我不想在结果集中包含任何其他相关实体

PS2:我也在使用IdeaBlade DevForce

先谢谢你

最好的威士忌,
马可·阿尔维斯。

这很难看,但应该适合你的情况。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);

我建议查看位于的DevForce文档,以了解有关动态查询的更多信息。

老实说,我真的不知道从哪里开始。如果这不是你所期望的,我很抱歉。谢谢你的评论!IdeaBrade DevForce通过我-这对问题很重要吗?似乎很少有人熟悉DevForce。如果它不重要,您可以将其从标题和标记中删除。@tintyethan。完成。谢谢你,我知道我没有提到。但有可能通过PredicateBuilder或iDeaBrade DevForce实现吗?谢谢你@sbelini。如果我在编译时不知道实体,例如,我想使用PredicateBuilder动态构建它,该怎么办?注意方法EntityQuery.Create()。在那里,我硬编码了EntityType公司,但它可能是任何其他EntityType。
  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);