查询函数


我们可以使用SqlFunc这个类调用Sql函数,用法如下:

db.Queryable<Student>().Where(it => SqlFunc.ToLower(it.Name) == SqlFunc.ToLower("JACK")).ToList();


支持的C#函数:


.ToString  .Contains  .Length

.ToLower  .ToUpper  .ToSubstring 

.Equals    .HasValue  .Replace

.EndsWith  .StartsWith  .Trim

.HasValue  .Value  .AddDay  .Date

和常用的Convert.ToInt32等



SqlFunc函数:


三元判段 ,相当于 it.id==1?1:2

SqlFunc.IIF(it.Id == 1, 1, 2)


if else 4.6.0.1

 SqlFunc.IF(st.Id > 1)
     .Return(st.Id)
     .ElseIF(st.Id == 1)
     .Return(st.SchoolId).End(st.Id)


IsNulll4.6.0.1

SqlFunc.IsNull(it.Id, 0)//如果是null则是0


获取数据库时间4.6.0.1

SqlFunc.GetDate();


判段是NULL或者空

SqlFunc.IsNullOrEmpty(object thisValue)


判段不是NULL并且不是空

SqlFunc.HasValue(object thisValue)


判段大于0并且不等于NULL

SqlFunc.HasNumber(object thisValue)


转小写

SqlFunc.ToLower(object thisValue)

 

转大写

SqlFunc.ToUpper(object thisValue)


去前后空格

SqlFunc.Trim(object thisValue)



模糊查询 like %@p%

SqlFunc.Contains(string thisValue, string parameterValue)

也可以使用 .Where(it=>it.Name.Contains("a"));



In操作  thisValue={1,2,3} 生成的Sql就是 paramterValie in (1,2,3)

SqlFunc.ContainsArray(object[] thisValue, string parameterValue)

也可以使用   .Where(it=>数组变量.Contains(it.Id));  

Not In 操作

.Where(it=>!Array.Contains(it.Id));



模糊查询 like @p%

SqlFunc.StartsWith(object thisValue, string parameterValue)



模糊查询 like %@p

SqlFunc.EndsWith(object thisValue, string parameterValue)



等于

SqlFunc.Equals(object thisValue, object parameterValue)



是否是同一天

SqlFunc.DateIsSame(DateTime date1, DateTime date2)



是否是同一时间 (dataType 可以是年、月、天、小时、分钟、秒和毫秒)

SqlFunc.DateIsSame(DateTime date1, DateTime date2, DateType dataType)



在当前时间加一定时间(dataType 可以是年、月、天、小时、分钟、秒和毫秒)

SqlFunc.DateAdd(DateTime date, int addValue, DateType dataType)



在当前时间加N天

SqlFunc.DateAdd(DateTime date, int addValue)


获取当前时间的年、月、天、小时、分钟、秒或者毫秒

SqlFunc.DateValue(DateTime date, DateType dataType)


范围判段

SqlFunc.Between(object value, object start, object end)


类型转换

SqlFunc.ToInt32(object value) 
SqlFunc.ToInt64(object value)
SqlFunc.ToDate(object value) 
SqlFunc.ToString(object value) 
SqlFunc.ToDecimal(object value) 
SqlFunc.ToGuid(object value) 
SqlFunc.ToDouble(object value) 
SqlFunc.ToBool(object value)



截取字符串

SqlFunc.Substring(object value, int index, int length)


替换字符串

SqlFunc.Replace(object value, string oldChar, string newChar)


获取字符串长度

SqlFunc.Length(object value)


聚合函数

SqlFunc.AggregateSum<TResult>(TResult thisValue) 
SqlFunc.AggregateAvg<TResult>(TResult thisValue)
SqlFunc.AggregateMin(TResult thisValue) 
SqlFunc.AggregateMax<TResult>(TResult thisValue) 
SqlFunc.AggregateCount<TResult>(TResult thisValue)


将Select中的一列用Sql实现

 var s2 = db.Queryable<Student>()
 .Select(it => new { 
 
               id = it.Id, 
               rowIndex=SqlFunc.MappingColumn(it.Id, " row_number() over(order by id)") 
                            
             }).ToList();

 //SELECT  
         [ID] AS [id] , 
         row_number() over(order by id) AS [rowIndex]  
                      
    FROM [STudent]
    
 //rowIndex= 变成了 AS [rowIndex] 
 //SqlFunc.MappingColumn(it.Id, " row_number() over(order by id)")  变成了  row_number() over(order by id)



如果还有不支持的可以写字符串

db.Queryable<Student>().Where("id=@id",new{id=1}).Select("id,name").ToList()


如果还不支持可以下面的自定义扩展SqlFunc让你的代码更漂亮


自定义函数


扩展自定义函数