mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
Rich query
This commit is contained in:
parent
8484b4202d
commit
504b24be3d
@ -284,6 +284,12 @@ namespace OrmTest.Demo
|
||||
var getUnionAllList2 = db.UnionAll(db.Queryable<Student>(), db.Queryable<Student>()).ToList();
|
||||
|
||||
var test1 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Where(st=>st.CreateTime>SqlFunc.GetDate()).Select((st, sc) => SqlFunc.ToInt64(sc.Id)).ToList();
|
||||
//var test2= db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
|
||||
// .Where(st=>
|
||||
// SqlFunc.IF(st.Id>1)
|
||||
// .Return(st.Id)
|
||||
// .ElseIF(st.Id==1)
|
||||
// .Return(st.SchoolId).End(st.Id)==1).ToList();
|
||||
}
|
||||
public static void Page()
|
||||
{
|
||||
|
@ -40,6 +40,10 @@ namespace OrmTest.Demo
|
||||
List<ConditionalModel> conModels = new List<ConditionalModel>();
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Like, FieldValue = "1" });
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNullOrEmpty });
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.In,FieldValue="1,2,3" });
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NotIn, FieldValue = "1,2,3" });
|
||||
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1,2,3" });
|
||||
var student = db.Queryable<Student>().Where(conModels).ToList();
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,12 @@ namespace SqlSugar
|
||||
GreaterThan =2,
|
||||
GreaterThanOrEqual = 3,
|
||||
LessThan=4,
|
||||
LessThanOrEqual = 5
|
||||
LessThanOrEqual = 5,
|
||||
In=6,
|
||||
NotIn=7,
|
||||
LikeLeft=8,
|
||||
LikeRight=9,
|
||||
NoEqual=10,
|
||||
IsNullOrEmpty=11
|
||||
}
|
||||
}
|
||||
|
28
Src/Asp.Net/SqlSugar/ExpressionsToSql/CaseWhen/CaseWhen.cs
Normal file
28
Src/Asp.Net/SqlSugar/ExpressionsToSql/CaseWhen/CaseWhen.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class CaseWhen
|
||||
{
|
||||
public CaseThen ElseIF(bool condition)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public T End<T>(T defaultValue)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
public class CaseThen
|
||||
{
|
||||
|
||||
public CaseWhen Return<T>(T result)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -34,7 +34,7 @@ namespace SqlSugar
|
||||
{
|
||||
get
|
||||
{
|
||||
return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接字符串出错了,实在找不到原因请先Google错误{0}.");
|
||||
return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:{0}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -116,5 +116,6 @@ namespace SqlSugar
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
public static Subqueryable<T> Subqueryable<T>() where T:class,new(){ throw new NotSupportedException("Can only be used in expressions");}
|
||||
public static CaseThen IF(bool condition) { throw new NotSupportedException("Can only be used in expressions"); }
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,10 @@ namespace SqlSugar
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (IsIfElse(express, methodName)) {
|
||||
List<Expression> expList = new List<Expression>();
|
||||
return;
|
||||
}
|
||||
if (IsContainsArray(express, methodName, isValidNativeMethod))
|
||||
{
|
||||
methodName = "ContainsArray";
|
||||
@ -70,6 +74,14 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsIfElse(MethodCallExpression express, string methodName)
|
||||
{
|
||||
if (methodName == "End"&& express.Object.Type==typeof(CaseWhen))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
|
||||
{
|
||||
CheckMethod(express);
|
||||
|
@ -330,6 +330,34 @@ namespace SqlSugar
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName);
|
||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
|
||||
break;
|
||||
case ConditionalType.In:
|
||||
if (item.FieldValue == null) item.FieldValue = string.Empty;
|
||||
var inValue1 = ("("+item.FieldValue.Split(',').ToJoinSqlInVals()+")");
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "IN", inValue1);
|
||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
|
||||
break;
|
||||
case ConditionalType.NotIn:
|
||||
if (item.FieldValue == null) item.FieldValue = string.Empty;
|
||||
var inValue2 = ("(" + item.FieldValue.Split(',').ToJoinSqlInVals() + ")");
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "NOT IN", inValue2);
|
||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
|
||||
break;
|
||||
case ConditionalType.LikeLeft:
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
|
||||
parameters.Add(new SugarParameter(parameterName,item.FieldValue + "%"));
|
||||
break;
|
||||
case ConditionalType.LikeRight:
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
|
||||
parameters.Add(new SugarParameter(parameterName, "%"+item.FieldValue));
|
||||
break;
|
||||
case ConditionalType.NoEqual:
|
||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<>", parameterName);
|
||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
|
||||
break;
|
||||
case ConditionalType.IsNullOrEmpty:
|
||||
builder.AppendFormat("{0} ({1}) OR ({2}) ", type, item.FieldName.ToSqlFilter()+" IS NULL ", item.FieldName.ToSqlFilter()+" = '' ");
|
||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -80,6 +80,7 @@
|
||||
<Compile Include="Entities\SlaveConnectionConfig.cs" />
|
||||
<Compile Include="Enum\ConditionalType.cs" />
|
||||
<Compile Include="Enum\DbType.cs" />
|
||||
<Compile Include="ExpressionsToSql\CaseWhen\CaseWhen.cs" />
|
||||
<Compile Include="ExpressionsToSql\Subquery\Items\ISubOperation.cs" />
|
||||
<Compile Include="ExpressionsToSql\Subquery\Items\SubAnd.cs" />
|
||||
<Compile Include="ExpressionsToSql\Subquery\Items\SubCount.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user