導航一對一存在多個導航條件如何使用 返回

SqlSugar 沟通中
4 126
该叫什么 发布于1周前
悬赏:0 飞吻

如果我使用 導航一對一的時候

類:

public class YearsEndingPersonTypeDetail{   


          public virtual string VersionId    { get; set; }


         [Navigate(NavigateType.OneToOne, nameof(UserNo), nameof(MsiHrDptEmpVersion.EmpNo))]

         public virtual MsiHrDptEmpVersion msiHrDptEmpVersion  { get; set; }

}

使用

//导航+主表过滤  导航属性过滤
var list = db.Queryable<StudentA>()
         .Includes(x => x.SchoolA) //填充子对象 (不填充可以不写)
         .Where(x =>x.SchoolA.SchoolName=="北大"
         .ToList();


Db.Queryable<YearsEndingPersonTypeDetail>()

            .Includes(ssd=>ssd.msiHrDptEmpVersion)

            .Where(ssd=>ssd.msiHrDptEmpVersion.VersionId==ssd.VersionId)         

           .OrderByIF(!string.IsNullOrEmpty(sort), sort)

           .ToPageListAsync(pagerInfo.CurrenetPageIndex, pagerInfo.PageSize, totalCount);


執行出來在sql

SELECT COUNT(1) FROM

(

SELECT  "VERSION_ID"

    FROM "HRCOMPENSATION"."YEARS_ENDING_PERSON_TYPE_DETAIL" "SSD"

WHERE (

    (SELECT "VERSION_ID" FROM "MSI_HR_DPT_EMP_VERSION"  WHERE  SSD"."USER_NO"="EMPNO"  ) = "VERSION_ID"

)


)

CountTable

這裡會 報出 單列子查詢所傳回的資料列不只一列 

因為是在這裡(SELECT "VERSION_ID" FROM "MSI_HR_DPT_EMP_VERSION"  WHERE  SSD"."USER_NO"="EMPNO"  )

單獨這個條件SSD"."USER_NO"="EMPNO" 要不滿足一對一在 得再加上  SSD"."VERSION_ID"=''VERSION_ID'' 才能滿足一對一

热忱回答4

  • 2个字段用
    image.png

    0 回复
  • 夢 VIP0
    1周前

    @hp9999:你好像沒有弄懂我的意思我上面的例子就是按照你這樣的,只是我的需求上還需要在追加一個匹配關係



    0 回复
  • 這裡會 報出 單列子查詢所傳回的資料列不只一列   

    这个错是你的数据问题,可能存在多对一的情况。如果一对一是是OK的。

    0 回复
  • 特殊情况可以用子查询实现。

    0 回复