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

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。

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值