【问题标题】:Dynamic IQueryable Join Query动态 IQueryable 连接查询
【发布时间】:2020-11-10 19:22:04
【问题描述】:

背景:

给定以下两个实体通过一对一的关系联合起来:

public partial class Parent
{
    public long Id { get; set; }
    public string Email { get; set; }
    public virtual Details Details{ get; set; }
}

public partial class Details
{
    public long Id { get; set; }
    public long ParentId{ get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public virtual Parent Parent { get; set;}
}

并且拥有以下Query 模型:

public class Query
{
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? Dob { get; set; }
}

问题

如何将Query 作为IQueryable 应用于Parent(或Details)实体?

基于我的用例的注释:

  • Query 类不能有 ParentDetails 的两个子类(应该展平)
  • DB SQL 查询应获取与ParentDetails 中的两个条件匹配的结果(如果条件不符合详细信息,则父级不应出现在结果中)。
  • Query 模型中可能有很长的可选字段列表。这意味着数据库查询应该是动态且足够智能的,以知道如何构建查询并知道Query 中的每个字段属于哪个实体ParentDetails(即我不想要一个解决方案添加条件检查Dob是否存在于Query中)

用例:

我正在使用HotChocolate 框架来集成使用expression trees 构建查询的GraphQL。提到了我要解决的问题here

我们将非常感谢您的支持和建议!

【问题讨论】:

    标签: c# entity-framework expression-trees iqueryable hotchocolate


    【解决方案1】:

    我设法通过在数据库上创建一个View 来处理这个问题,它将两个表连接起来作为一个实体,我可以在其中过滤、分页和排序,无论它是一对一的链接表还是单个表。 然后使用 this link 对该视图进行逆向工程以与 EntityFramework 集成,最后设法在两个实体上处理 IQueryable

    如果有任何其他可用且适用于 HotChocolate 的选项,请添加另一个答案以增强我现有的解决方案。

    【讨论】:

      猜你喜欢
      • 2013-09-16
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多