无实体情况下动态字段和动态条件 返回

SqlSugar 沟通中
11 233
该叫什么 cr7 发布于2周前
悬赏:0 飞吻
if(xxxxx)
{
	selectStr = "ISNULL(SL,0)-(CASE WHEN ISNULL(SL1,0)>=0 THEN ISNULL(SL1,0) ELSE 0 END)";
	whereStr = " SL>0 AND ISNULL(SL,0)-(CASE WHEN ISNULL(SL1,0)>=0 THEN ISNULL(SL1,0) ELSE 0 END)-SL<0 ";
}
else if(xxxxx)
{
	selectStr = "ISNULL(SL,0)";
	whereStr = " SL>0 ISNULL(SL,0)-SL<0 ";
}
.......


SELECT SPDM ,{selectStr} AS 库存数量 FROM {表名} where {whereStr}

// 注:表名是动态的,没有实体的。麻烦提供一个demo,非常感谢。。。。


热忱回答11

  • 你要简单模式还是多库兼容模式 

    0 回复
  • 简单模式就是

    db.Queryable<object>().AS(表名).Where(whereStr).Select(selectStr).ToList()


    0 回复
  • cr7 cr7 VIP0
    2周前

    @fate sta:要支持多库

    0 回复
  • @cr7:我写一个

    0 回复
  • cr7 cr7 VIP0
    2周前

    @fate sta:多谢了,尝试了很多种方法都不行。只能发帖求助。。。

    0 回复
  • 生成的SQL

    SELECT * FROM [表名]  WHERE [SL] > 0   AND ISNULL([SL1],0) - ( CASE  WHEN ISNULL([SL1],0) >= 0 THEN ISNULL([SL1],0)  ELSE 0 END ) - [SL] < 0


    下面是代码

     var queryable = db.Queryable<object>()
         .AS("表名"); 
         
     if (true)//拼接条件。
     {
         var where1 = ObjectFuncModel.Create("Format", "SL", ">", "{int}:0"); 
         queryable.Where(where1);
    
         var casefunc = new ObjectFuncModel()
         {
             FuncName = "IIF",
             Parameters = new List<object>{
               ObjectFuncModel.Create("Format", ObjectFuncModel.Create("IsNULL","SL1", "{int}:0"),">=","{int}:0"),
               ObjectFuncModel.Create("IsNULL","SL1", "{int}:0"),
               "{int}:0",
    
              }
    
         };
         var where2_left_Left = ObjectFuncModel.Create("Format",
             ObjectFuncModel.Create("IsNULL", "SL1", "{int}:0"), "-", casefunc);
         var where2_left = ObjectFuncModel.Create("Format", where2_left_Left, "-", "SL");
         var where2 = ObjectFuncModel.Create("Format" , where2_left, "<", "{int}:0");
         queryable.Where(where2);
     } 
     var sql = queryable.ToSqlString();
    //SELECT * FROM [表名]  WHERE [SL] > 0   AND ISNULL([SL1],0) - ( CASE  WHEN ISNULL([SL1],0) >= 0 THEN ISNULL([SL1],0)  ELSE 0 END ) - [SL] < 0
    0 回复
  • 说白了就是函数和函数的嵌套

    字段是"xxx"

    外部参数是 "{C#类型}:值"

    0 回复
  • cr7 cr7 VIP0
    2周前

    @fate sta:还有一个问题,查询字段也动态的selectStr,当查询字段是运算的时候怎么处理?
    ISNULL(SL,0)-(CASE WHEN ISNULL(SL1,0)>=0 THEN ISNULL(SL1,0) ELSE 0 END)


    如果不运算的情况下,我知道通过函数可以解决。

    0 回复
  • @cr7


    //方式1:多库兼容

    var selector= new List<SelectModel>();

    if(xx)

    {

       selector.Add(new SelectModel(){  FiledName = ObjectFuncModel.Create(xxxxx),AsName = "id2", })

    }    

    var list=db.Queryable<Order>().Select(selector).ToList();


    0 回复
  • fieldName也可以是函数的

    0 回复
  • cr7 cr7 VIP0
    2周前

    @fate sta:可以了,多谢多谢。。。。

    0 回复