无实体情况下动态字段和动态条件 返回
SqlSugar
沟通中
11
233

悬赏: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
2周前你要简单模式还是多库兼容模式
0 回复 -
fate sta VIP0
2周前简单模式就是
db.Queryable<object>().AS(表名).Where(whereStr).Select(selectStr).ToList()
0 回复 -
cr7 VIP0
2周前@fate sta:要支持多库
0 回复 -
fate sta VIP0
2周前@cr7:我写一个
0 回复 -
cr7 VIP0
2周前@fate sta:多谢了,尝试了很多种方法都不行。只能发帖求助。。。
0 回复 -
fate sta VIP0
2周前生成的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 回复 -
fate sta VIP0
2周前说白了就是函数和函数的嵌套
字段是"xxx"
外部参数是 "{C#类型}:值"
0 回复 -
cr7 VIP0
2周前@fate sta:还有一个问题,查询字段也动态的selectStr,当查询字段是运算的时候怎么处理?
ISNULL(SL,0)-(CASE WHEN ISNULL(SL1,0)>=0 THEN ISNULL(SL1,0) ELSE 0 END)如果不运算的情况下,我知道通过函数可以解决。
0 回复 -
fate sta VIP0
2周前@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 回复 -
fate sta VIP0
2周前fieldName也可以是函数的
0 回复 -
cr7 VIP0
2周前@fate sta:可以了,多谢多谢。。。。
0 回复