SqlSugar多级查询

 直接上代码

            //一级关联查询,直接通过字表ID查询字表实体信息
            var user = Db.Queryable<SysUser>().Where(it => it.UserCode == userCode).Mapper(it=>it.employee, it => it.EmployeeId).ToList();

            //多级关联查询一,USER-->EMPLOYEE-->DEPARTMENT   user.employee.department
            var user1 = Db.Queryable<SysUser>().Where(it => it.UserCode == userCode).Mapper((it, cache) =>
            {
               
                it.employee = cache.GetListByPrimaryKeys<Employee>(ea => ea.EmployeeId).FirstOrDefault<Employee>();
                if (it.employee != null)
                    it.employee.department = cache.GetListByPrimaryKeys<Department>(ed => it.employee.DepartmentId).FirstOrDefault<Department>();
            }).ToList();

            //多级关联查询二,USER-->EMPLOYEE-->DEPARTMENT   user.employee.department
            var list = Db.Queryable<SysUser, Employee, Department>((U, E, D) => new object[] {
           JoinType.Left,U.EmployeeId==E.EmployeeId,
            JoinType.Left,E.DepartmentId == D.DepartmentId}
            ).Where((U, E, D) => U.UserCode == userCode)
            .Select((U, E, D) => new { U = U, E = E, D = D }).ToList();
            var user2 = new SysUser();
            user2.employee = new Employee();
            user2.employee.department = new Department();
            user2 = list[0].U;
            user2.employee = list[0].E;
            user2.employee.department = list[0].D;

表结构


/// <summary>
/// 用户表
/// </summary>
public class SysUser
{
    private System.Guid _UserId;
    /// <summary>
    /// 
    /// </summary>
    [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
    public System.Guid UserId { get { return this._UserId; } set { this._UserId = value; } }

    private System.String _UserName;
    /// <summary>
    /// 
    /// </summary>
    public System.String UserName { get { return this._UserName; } set { this._UserName = value?.Trim(); } }

    private System.String _UserCode;
    /// <summary>
    /// 
    /// </summary>
    public System.String UserCode { get { return this._UserCode; } set { this._UserCode = value?.Trim(); } }

    private System.Guid _EmployeeId;
    /// <summary>
    /// 
    /// </summary>
    public System.Guid EmployeeId { get { return this._EmployeeId; } set { this._EmployeeId = value; } }

    private System.String _PassWord;
    /// <summary>
    /// 
    /// </summary>
    public System.String PassWord { get { return this._PassWord; } set { this._PassWord = value?.Trim(); } }

    private Employee _employee;
    [SugarColumn(IsIgnore = true)]
    public Employee employee { get { return this._employee; } set { this._employee = value; } }
}

/// <summary>
/// 部门表
/// </summary>
public class Department
{
    private System.Guid _DepartmentId;
    /// <summary>
    /// 部门ID
    /// </summary>
    [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
    public System.Guid DepartmentId { get { return this._DepartmentId; } set { this._DepartmentId = value; } }

    private System.String _RepealRemark;
    /// <summary>
    /// 撤消原因
    /// </summary>
    public System.String RepealRemark { get { return this._RepealRemark; } set { this._RepealRemark = value?.Trim(); } }

    private System.Guid _ParentId;
    /// <summary>
    /// 上级部门
    /// </summary>
    public System.Guid ParentId { get { return this._ParentId; } set { this._ParentId = value; } }

    private System.String _Code;
    /// <summary>
    /// 部门编码
    /// </summary>
    public System.String Code { get { return this._Code; } set { this._Code = value?.Trim(); } }

    private System.String _Name;
    /// <summary>
    /// 部门名称
    /// </summary>
    public System.String Name { get { return this._Name; } set { this._Name = value?.Trim(); } }
}
/// <summary>
/// 员工
/// </summary>
public class Employee
{
    private System.Guid? _InnerEmployee;
    /// <summary>
    /// 内部介绍人
    /// </summary>
    public System.Guid? InnerEmployee { get { return this._InnerEmployee; } set { this._InnerEmployee = value; } }

    private System.DateTime _CertificateLimit;
    /// <summary>
    /// 证件有效期
    /// </summary>
    public System.DateTime CertificateLimit { get { return this._CertificateLimit; } set { this._CertificateLimit = value; } }

    private System.DateTime _JobDate;
    /// <summary>
    /// 入职日期(首次入职)
    /// </summary>
    public System.DateTime JobDate { get { return this._JobDate; } set { this._JobDate = value; } }

    private System.Guid _EmployeeId;
    /// <summary>
    /// 员工ID
    /// </summary>
    [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
    public System.Guid EmployeeId { get { return this._EmployeeId; } set { this._EmployeeId = value; } }

    private System.String _CnName;
    /// <summary>
    /// 中文名称
    /// </summary>
    public System.String CnName { get { return this._CnName; } set { this._CnName = value?.Trim(); } }

    private System.String _IDCardNo;
    /// <summary>
    /// 证件号码
    /// </summary>
    public System.String IDCardNo { get { return this._IDCardNo; } set { this._IDCardNo = value?.Trim(); } }

    private Department _department;
    [SugarColumn(IsIgnore = true)]
    public Department department { get { return this._department; } set { this._department = value; } }
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Neo4j中进行多级查询可以使用Cypher查询语言来实现。首先,您需要定义适当的实体和DAO组件来映射数据模型。根据引用和引用中的代码,您可以使用`CrudNode`实体类和`NeoRepository`接口来操作数据。接下来,您可以使用Cypher查询语言编写查询语句。 根据引用中的数据逻辑,如果您需要提取与特定`pin`关联的全部类目数据并选择最高级别的数据,您可以使用以下查询语句: ``` MATCH (p:CrudNODE)-[:buxiangjiaban*]->(c:CrudNODE) WHERE ID(p) = {pinId} OPTIONAL MATCH (c)-[:buxiangjiaban]->(child:CrudNODE) WHERE NOT (child)-[:buxiangjiaban]->() RETURN p, c ORDER BY LENGTH((c)-[:buxiangjiaban*]->()) DESC LIMIT 1 ``` 请注意,上述查询假设您具有`pin`节点的唯一标识符。您可以将`{pinId}`替换为实际的`pin`节点的标识符值。 这个查询使用了Cypher的`MATCH`和`OPTIONAL MATCH`子句来匹配与特定`pin`关联的全部类目数据,并使用`ORDER BY`子句根据关联类目的级别降序排序。最后,使用`LIMIT 1`限制结果只返回最高级别的类目数据。 请注意,以上仅是一个示例查询语句,具体的语句可能因您的数据模型和需求而有所不同。您可以根据实际情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [neo4j 层级查询](https://blog.csdn.net/qq_32489573/article/details/96455318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [neo4j查询节点关联的有等级关系的节点数据,只取最高节点的数据,简化提数逻辑](https://blog.csdn.net/Mint6/article/details/113921222)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值