一对一,一对多动态lamda查询问题 返回

SqlSugar 沟通中
3 319

 var query = db.Queryable<LC_ETM_DB_DemandOrderMultipleDetailsEntity>()

     .Includes(c=>c.DemandOrder)

     .Includes(c=>c.DemandOrder.ListRequiredProject)

     .Includes(c=>c.DemandOrder.Order)

     .OrderByDescending(c => c.F_CreateDate)

     .Where(lamada)

     ;

lamada值为{i => ((True AndAlso (True AndAlso (True AndAlso (i.DemandOrder.ListRequiredProject.F_Category == "817327215627730885")))) AndAlso ((True AndAlso True) AndAlso True))}   

生成出的SQL为什么是SELECT * FROM (SELECT [F_DemandOrderID],[F_GroupNumber],[F_UnitName],[F_UnitNumber],[F_TotalUnitNumber],[F_Specification],[F_SchedulingDeliveryDate],[F_CreateDate],[F_CreateUserId],[F_CreateUserName],[F_ModifyDate],[F_ModifyUserId],[F_ModifyUserName],[F_Id],ROW_NUMBER() OVER(ORDER BY [F_CreateDate] DESC) AS RowIndex  FROM [LC_ETM_DB_DemandOrderMultipleDetails] [i]  WHERE ((( 1 = 1 ) AND(( 1 = 1 ) AND(( 1 = 1 ) AND(( SELECT [LC_ETM_DB_ListRequiredProjects1].[F_Category] FROM [LC_ETM_DB_DemandOrder] [LC_ETM_DB_DemandOrder0] Inner JOIN [LC_ETM_DB_ListRequiredProjects] [LC_ETM_DB_ListRequiredProjects1] ON  [LC_ETM_DB_ListRequiredProjects1].[F_Id]=[LC_ETM_DB_DemandOrder0].[F_ListRequiredProjectID]   WHERE  [i].[F_Id] = [LC_ETM_DB_DemandOrder0].[F_Id]   ) = N'817327215627730885' )))) AND ((( 1 = 1 ) AND( 1 = 1 ) ) AND ( 1 = 1 ) ))) T WHERE RowIndex BETWEEN 1 AND 20

热忱回答3

  • 你够造的表达式也要用C不能用i

    0 回复
  • image.png修改为I也是一样的SELECT * FROM (SELECT [F_DemandOrderID],[F_GroupNumber],[F_UnitName],[F_UnitNumber],[F_TotalUnitNumber],[F_Specification],[F_SchedulingDeliveryDate],[F_CreateDate],[F_CreateUserId],[F_CreateUserName],[F_ModifyDate],[F_ModifyUserId],[F_ModifyUserName],[F_Id],ROW_NUMBER() OVER(ORDER BY [F_CreateDate] DESC) AS RowIndex  FROM [LC_ETM_DB_DemandOrderMultipleDetails] [i]  WHERE ((( 1 = 1 ) AND(( 1 = 1 ) AND(( 1 = 1 ) AND(( SELECT [LC_ETM_DB_ListRequiredProjects1].[F_Category] FROM [LC_ETM_DB_DemandOrder] [LC_ETM_DB_DemandOrder0] Inner JOIN [LC_ETM_DB_ListRequiredProjects] [LC_ETM_DB_ListRequiredProjects1] ON  [LC_ETM_DB_ListRequiredProjects1].[F_Id]=[LC_ETM_DB_DemandOrder0].[F_ListRequiredProjectID]   WHERE  [i].[F_Id] = [LC_ETM_DB_DemandOrder0].[F_Id]   ) = N'817327215627730885' )))) AND ((( 1 = 1 ) AND( 1 = 1 ) ) AND ( 1 = 1 ) ))) T WHERE RowIndex BETWEEN 1 AND 20

    希望的查询是(i.DemandOrder.ListRequiredProject.F_Category == "817327215627730885",但实际执行的是LC_ETM_DB_DemandOrder0].[F_Id]   ) = N'817327215627730885' 

    0 回复
  • @fate sta:会不会是因为两层的问题i.DemandOrder.ListRequiredProject.F_Category == "817327215627730885"

    0 回复