欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EF Linq To Sql 常用查询整理_常用使用方式整理

程序员文章站 2022-06-11 22:42:15
...

EF Linq To Sql 常用查询整理_常用使用方式整理

此处案例使用的.net 5.0框架, EntityFrameworkCore的代码,多数使用场景跟.net framework中相同。

使用到的命名空间

using System.Linq; // Linq
using System.Collections.Generic; //List
using Microsoft.EntityFrameworkCore; // Include()

常用的查询方式整理如下:

 

一、查询 和 多条件查询

1.根据主键查询  Find()

此方式,性能高,执行查询先从内存中找,然后去数据库找。

//1.根据主键查询
//Find()
Course couse1 = _context.Courses.Find(1);

 

2.获取对象,获取第一个,最后一个  

FirstOrDefault() ,获取第一个没有返回 null,不报错

LastOrDefault()

//2.获取对象,获取第一个,最后一个,
//FirstOrDefault()
//LastOrDefault()
Course couse2 = _context.Courses.Where(q => q.CourseId == 5).FirstOrDefault();
Course couse3 = _context.Courses.Where(q => q.CourseId == 5).LastOrDefault();

3. 获取列表 ToList() 

//3.获取列表
//ToList()
List<Course> list1 = _context.Courses.Where(q => q.AddTime > DateTime.Now)
    .ToList();

//4.获取部分列表
//Select()
object objList = _context.Courses.Select(q => new
{
    q.CourseId,
    q.Title
}).ToList();

 

二、多条件查询和判断

1.Where()  + 条件运算符 && || > < 

2.Any()  : 判断是否存在

3.Contains :  判断含有的数据 对应数据库 的 In 查询

//and
List<Course> list2 = _context.Courses.Where(q => q.AddTime < DateTime.Now && q.Title.Contains("日本语")).ToList();

//or
List<Course> list3 = _context.Courses.Where(q => q.CourseId < 100 || q.Title.Contains("日本语")).ToList();

//any
List<Course> list4 = _context.Courses.Where(q => q.CourseClassList.Any(i => i.ClassId == 3)).ToList();

三、查询关联表数据

EF Core 中默认查询不带关联表数据,提高性能。如果有需要的使用Include() 导入。

//Include()
//关联字段
Course course4 = _context.Courses.Include(q => q.CourseClassList).Where(q => q.CourseId == 3).FirstOrDefault();
int[] classidList = new[] { 3, 4 };
List<Course> list5 = _context.Courses.Where(q => q.CourseClassList.Any(i => classidList.Contains(i.ClassId))).ToList();

 

四、模糊查询

Contains() 、 StartWidth() 、 EndWidth()

更多参考:https://blog.csdn.net/u011127019/article/details/78469246

//Contains() 、 StartWidth() 、 EndWidth()
List<Course> list6 = _context.Courses.Where(q => q.Title.StartsWith("标准")).ToList();

 

五、聚合查询

1.Count() :求数量
2.Sum():求和
3.Distinct() : 去重复
4.Max() :求最大值
5.Min():求最小值
6.DefaultIfEmpty() : 对于可为空的表,忽略 null 统计

int count = _context.Courses.Where(q => q.Title.StartsWith("标准")).Count();
int snum = _context.Courses.Where(q => q.CourseClassList.Any(i => i.ClassId == 4)).Select(q => q.ViewCount)
    .Sum();

 

六、排序处理

1.OrderBy() :第一排序,正序
2.OrderByDescending():第一排序,倒序
3.ThenBy():更多排序,正序
4.ThenByDescending():更多排序,倒序

List<Course> list7 = _context.Courses.OrderByDescending(q => q.AddTime)
    .ThenByDescending(q => q.ViewCount)
    .ToList();

 

七、分页查询

注释:分页之前,必须排序处理

1.Skip() :划过个数
2.Take(): 获取个数

List<Course> list8 = _context.Courses.OrderByDescending(q => q.AddTime)
    .ThenByDescending(q => q.ViewCount)
    .Skip(0)
    .Take(10)
    .ToList();

 

八、分组查询

1.GroupBy()  :单列分组,多列分组

var group1 = _context.Courses.GroupBy(q => q.AddUserId).ToList();
foreach (var group in group1)
{
    //group.Key //分组数据
    //group.Count(); //当前组数量
}
var group2 = _context.Courses.GroupBy(q => new { q.AddUserId,q.UpdateUserId}).ToList();

 

 

更多:

EF And 和Or 条件拼接扩展整理

关于EF上线文异常问题整理

EF GroupBy多个字段

EF中Sum()异常:到值类型“System.Decimal”的强制转换失败,因为具体化值为 null。