编辑
2025-09-22
C#
00

目录

实体类定义
示例1:字符串函数
使用 Replace进行字符串替换
使用 Substring进行字符串替换
使用 MergeString进行合并字符串
示例2:日期函数
使用 DateDiff计算年龄
使用 DateIsSame判断是否是同一天
使用时间减法计算
示例3:聚合函数
使用 AggregateCount进行分组统计
使用 AggregateSum进行合计
分组统计每个客户的Amount合计
示例4:条件函数
使用 StartsWith进行条件判断
使用 IFF进行三元运算判断
使用 IF进行CASE运算判断
总结

SqlSugar 是一个简单而强大的 .NET ORM(对象关系映射)框架,它支持多种数据库,并提供了丰富的功能来简化数据库操作。在 SqlSugar 中,SqlFunc 是一个非常有用的工具,它提供了一系列的方法来支持复杂的 SQL 函数操作,使得在 LINQ 查询中使用 SQL 函数变得非常简单和直观。

本文将通过一些实际的例子,展示如何在 SqlSugar 中使用 SqlFunc 来处理常见的数据库查询需求。

实体类定义

首先,我们定义一些实体类(Entity),以便在示例中使用。

C#
public class Student { public int Id { get; set; } public string Name { get; set; } public DateTime BirthDate { get; set; } public int ClassId { get; set; } } public class Class { public int Id { get; set; } public string ClassName { get; set; } } public class Order { public int Id { get; set; } public decimal Amount { get; set; } public DateTime OrderDate { get; set; } public string CustomerId { get; set; } }

示例1:字符串函数

使用 Replace进行字符串替换

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable().Select(x => new { NewName = SqlFunc.Replace(x.Name, "张", "X") }).ToList(); foreach (var x in result) { Console.WriteLine(x.NewName); }

image.png

这个例子展示了如何使用 SqlFunc.Replace 来替换字符串。

使用 Substring进行字符串替换

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable().Select(x => new { NewName = SqlFunc.Substring(x.Name,0,1) }).ToList(); foreach (var x in result) { Console.WriteLine(x.NewName); }

使用 MergeString进行合并字符串

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable().Select(x => new { BewFiled = SqlFunc.MergeString(x.Name,x.BirthDate.Year.ToString()) }).ToList(); foreach (var x in result) { Console.WriteLine(x.BewFiled); }

示例2:日期函数

使用 DateDiff计算年龄

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable().Select(x => new { Age = SqlFunc.DateDiff( DateType.Year, x.BirthDate,SqlFunc.GetDate()) }).ToList(); foreach (var x in result) { Console.WriteLine(x.Age); }

在这个例子中,我们使用 SqlFunc.DateDiff 来计算每个学生的年龄。DateInterval.Year 指定我们想要计算年份之差,SqlFunc.GetDate() 获取当前日期。

使用 DateIsSame判断是否是同一天

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .Where(x => SqlFunc.DateIsSame(x.BirthDate, DateTime.Parse("2002-09-01 10:00:00.000"))).ToList(); foreach (var x in result) { Console.WriteLine($"{x.Name} {x.BirthDate}"); }

image.png

注意:这里判断是年月日的判断不带小时分钟秒等。

使用时间减法计算

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .Select(x => new { TotalDay = (DateTime.Now - x.BirthDate).TotalDays }).ToList(); foreach (var x in result) { Console.WriteLine($"{x.TotalDay}"); }

示例3:聚合函数

在使用 SqlSugar 进行数据库操作时,聚合函数是处理数据统计的强大工具。通过 SqlFunc 类提供的聚合函数,我们可以轻松实现求和、计算平均值、找出最小值和最大值、统计数量等操作。

使用 AggregateCount进行分组统计

假设我们想要统计每个班级的学生数量。

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .GroupBy(x => x.ClassId) .Select(x => new { ClassId = x.ClassId, StudentCount = SqlFunc.AggregateCount(x.ClassId) }).ToList(); foreach (var x in result) { Console.WriteLine($"{x.ClassId} {x.StudentCount}"); }

这个例子中,我们使用 SqlFunc.AggregateCount 来统计每个班级的学生数量。

使用 AggregateSum进行合计

C#
SqlSugarRepository<Order> repOrder=new SqlSugarRepository<Order>(); var result = repOrder.AsQueryable() .Select(it => SqlFunc.AggregateSum(it.Amount)) .Single(); Console.WriteLine(result);

分组统计每个客户的Amount合计

C#
SqlSugarRepository<Order> repOrder=new SqlSugarRepository<Order>(); var result = repOrder.AsQueryable() .GroupBy(x => x.CustomerId) .Select(x => new { CustomerId = x.CustomerId, Amount = SqlFunc.AggregateSum(x.Amount) }).ToList(); foreach (var item in result) { Console.WriteLine($"{item.CustomerId} {item.Amount}"); }

image.png

示例4:条件函数

使用 StartsWith进行条件判断

假设我们想要查询所有名字以 "李" 开头的学生。

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .Where(x=>SqlFunc.StartsWith(x.Name,"李")) .ToList(); foreach (var item in result) { Console.WriteLine($"{item.Name}"); }

这里,SqlFunc.StartsWith 用于判断学生的名字是否以 "李" 开头。

使用 IFF进行三元运算判断

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .Select(x => new { Name=SqlFunc.IIF(x.Name=="张三","张三","张三B"), ClassId=x.ClassId }) .ToList(); foreach (var item in result) { Console.WriteLine($"{item.Name} {item.ClassId}"); }

image.png

使用 IF进行CASE运算判断

C#
SqlSugarRepository<Student> repStudent=new SqlSugarRepository<Student>(); var result = repStudent.AsQueryable() .Select(x => new { ClassName = SqlFunc.IF(x.ClassId == 1).Return("A") .ElseIF(x.ClassId == 2).Return("B") .ElseIF(x.ClassId == 3).Return("C").End("D"), ClassId = x.ClassId }) .ToList(); foreach (var item in result) { Console.WriteLine($"{item.ClassName} {item.ClassId}"); }

image.png

总结

SqlFunc 在 SqlSugar 中是一个非常强大的工具,它提供了丰富的函数支持,使得在 LINQ 查询中使用 SQL 函数变得非常简单。通过上述示例,我们可以看到 SqlFunc 如何帮助我们简化对字符串、日期、聚合以及条件判断等操作的处理。这只是 SqlFunc 功能的冰山一角,SqlSugar 还提供了更多的函数和特性,值得深入学习和探索。

希望本文能帮助你更好地理解和使用 SqlSugar 的 SqlFunc,优化你的数据库操作和查询。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!