sqlsugar入門(2)-C#方法與sugar自定義函數的區別


1、使用tostring獲取當天數據

 

            var list = ssc.Queryable<Student>().Where(o => o.CreateTime.Value.ToString("yyyy-MM-dd") == DateTime.Today.ToString("yyyy-MM-dd")).ToList();
            var sql = ssc.Queryable<Student>().Where(o => o.CreateTime.Value.ToString("yyyy-MM-dd") == DateTime.Today.ToString("yyyy-MM-dd")).ToSqlString();

看結果也是能查詢到數據但是生成的sql語句為

SELECT [Id],[Name],[Version],[SchoolId],[Grade],[Age],[CreateTime],[Type],[IsDelete] FROM [Student]  WHERE (DateName(Year,[CreateTime])+'-'+DateName(Month,[CreateTime])+'-'+DateName(Day,[CreateTime]) =DateName(Year,'2020/10/11 0:00:00')+'-'+DateName(Month,'2020/10/11 0:00:00')+'-'+DateName(Day,'2020/10/11 0:00:00'))

和實際需求還是有點差異。

2、使用sugar內置函數獲取當天數據

            var list1 = ssc.Queryable<Student>().Where(o=>SqlFunc.DateIsSame(o.CreateTime,DateTime.Today)).ToList();
            var sql1 = ssc.Queryable<Student>().Where(o => SqlFunc.DateIsSame(o.CreateTime, DateTime.Today)).ToSqlString();

生成的sql語句為

SELECT [Id],[Name],[Version],[SchoolId],[Grade],[Age],[CreateTime],[Type],[IsDelete] FROM [Student]  WHERE  (DATEDIFF(day,[CreateTime],'2020/10/11 0:00:00')=0)

3、自定義擴展函數獲取當天數據

添加靜態擴展方法

public static DateTime ToDate111<T>(this T str)
        {
            throw new NotSupportedException("Can only be used in expressions");
        }

添加擴展方法,解析為語句的時候注意一下,字段名稱和值

            expMethods.Add(new SqlFuncExternal()
            {
                UniqueMethodName = "ToDate111",
                MethodValue = (expInfo, dbType, expContext) =>
                {
                    if (dbType == DbType.SqlServer)
                        if (expInfo.Args.Count == 0)
                        {
                            return string.Format(" getdate() ");
                        }
                        else
                        {
                            return string.Format(" cast (CONVERT (varchar ( 100), {0} , 111) as date) ", expInfo.Args[0].MemberName);
                        }
                    if (dbType == DbType.MySql)
                        if (expInfo.Args.Count == 0)
                        {
                            return string.Format(" getdate() ");
                        }
                        else
                        {
                            return string.Format(" date_format( {0}, '%Y/%m/%d' ) ", expInfo.Args[0].MemberName);
                        }
                    else
                        throw new Exception("未實現");
                }
            });

 

生成的sql語句為

SELECT [Id],[Name],[Version],[SchoolId],[Grade],[Age],[CreateTime],[Type],[IsDelete] FROM [Student]  WHERE (cast (CONVERT (varchar ( 100), [CreateTime] , 111) as date) = '2020/10/11 0:00:00' )

 4、自行擴展ToString("yyyy-MM-dd")功能

Demo地址:https://gitee.com/xuanyun2018/sqlsugardemo.git

下一章節修改源碼看是否能支持原生ToString("yyyy-MM-dd")解析功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM