无实体情况下动态字段和动态条件 返回
SqlSugar
沟通中
11
1104
cr7 发布于2025/3/5
悬赏: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)
-
fate sta VIP0
2025/3/5你要简单模式还是多库兼容模式
0 回复 -
fate sta VIP0
2025/3/5简单模式就是
db.Queryable<object>().AS(表名).Where(whereStr).Select(selectStr).ToList()
0 回复 -
cr7 VIP0
2025/3/5@fate sta:要支持多库
0 回复 -
fate sta VIP0
2025/3/5@cr7:我写一个
0 回复 -
cr7 VIP0
2025/3/5@fate sta:多谢了,尝试了很多种方法都不行。只能发帖求助。。。
0 回复 -
fate sta VIP0
2025/3/5生成的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] < 00 回复 -
fate sta VIP0
2025/3/5说白了就是函数和函数的嵌套
字段是"xxx"
外部参数是 "{C#类型}:值"
0 回复 -
cr7 VIP0
2025/3/5@fate sta:还有一个问题,查询字段也动态的selectStr,当查询字段是运算的时候怎么处理?
ISNULL(SL,0)-(CASE WHEN ISNULL(SL1,0)>=0 THEN ISNULL(SL1,0) ELSE 0 END)如果不运算的情况下,我知道通过函数可以解决。
0 回复 -
fate sta VIP0
2025/3/5@cr7:
//方式1:多库兼容varselector=newList<SelectModel>();if(xx){selector.Add(new SelectModel(){FiledName =ObjectFuncModel.Create(xxxxx),AsName ="id2",})}varlist=db.Queryable<Order>().Select(selector).ToList();0 回复 -
fate sta VIP0
2025/3/5fieldName也可以是函数的
0 回复 -
cr7 VIP0
2025/3/5@fate sta:可以了,多谢多谢。。。。
0 回复