EFCore 之 IQueryable

所谓IQueryable

1、IQueryable只是代表一个“可以放到数据库服务器去执行的查询”,它没有立即执行,只是“可以被执行”而已。
2、对于IQueryable接口调用非终结方法的时候不会执行查询,而调用终结方法的时候则会立即执行查询。
3、终结方法:遍历、ToArray()、ToList()、Min()、Max()、Count()等;
4、非终结方法:GroupBy()、OrderBy()、Include()、Skip()、Take()等。
5、简单判断:一个方法的返回值类型如果是IQueryable类型,那么这个方法一般就是非终结方法,否则就是终结方法。

结论

1、IQueryable代表一个对数据库中数据进行查询的一个逻辑,这个查询是一个延迟查询。我们可以调用非终结方法向IQueryable中添加查询逻辑,当执行终结方法的时候才真正生成SQL语句来执行查询。
2、可以实现以前要靠SQL拼接实现的动态查询逻辑。

在*** Core中设计自定义仓储模式,首先需要定义一个通用的`IRepository`接口,该接口包含了基本的CRUD操作方法,如增删改查。通过继承这个接口,可以针对不同的实体类创建具体的仓储实现类。EF Core的`IQueryable`是一个非常强大的功能,它允许开发者构建类型安全的查询,同时延迟执行直到需要结果时才处理,这有助于提升查询性能。 参考资源链接:[ASP.NET Core:自定义仓储接口与EF Core集成示例](https://wenku.csdn.net/doc/14i8zs1vva?spm=1055.2569.3001.10343) 以下是根据提供的辅助资料《*** Core:自定义仓储接口与EF Core集成示例》进行实践时需要注意的几个关键点: 1. 创建`IRepository`接口,包含CRUD方法如`Add(T entity)`, `Delete(T entity)`, `Update(T entity)`和`GetById(int id)`等。 2. 实现仓储类,例如`ProductRepository`,在其中实现`IRepository<Product>`接口的方法。 3. 在仓储类中使用`DbContext`来调用Entity Framework Core的功能,比如使用`_dbContext.Products`来获取Product相关的数据操作。 4. 利用`IQueryable`进行查询操作。例如,实现`GetAll()`方法时,可以返回`_dbContext.Products.AsQueryable()`,这样就可以链式调用其他LINQ方法。 5. 在服务层通过构造函数注入`IRepository`接口的实例,然后调用仓储层的方法。 以下是一个简单的代码示例: ```csharp public interface IRepository<T> where T : class { IQueryable<T> GetAll(); T GetById(int id); void Add(T entity); void Update(T entity); void Delete(T entity); } public class ProductRepository : IRepository<Product> { private readonly ApplicationDbContext _dbContext; public ProductRepository(ApplicationDbContext dbContext) { _dbContext = dbContext; } public IQueryable<Product> GetAll() { return _dbContext.Products; } public Product GetById(int id) { return _dbContext.Products.Find(id); } public void Add(Product entity) { _dbContext.Products.Add(entity); _dbContext.SaveChanges(); } public void Update(Product entity) { _dbContext.Entry(entity).State = EntityState.Modified; _dbContext.SaveChanges(); } public void Delete(Product entity) { _dbContext.Products.Remove(entity); _dbContext.SaveChanges(); } } ``` 在此基础上,你可以进一步使用`IQueryable`来构建复杂的查询,例如筛选、排序、分页等操作。例如,获取名称包含特定字符串的产品列表: ```csharp var products = _dbContext.Products .Where(p => p.Name.Contains( 参考资源链接:[ASP.NET Core:自定义仓储接口与EF Core集成示例](https://wenku.csdn.net/doc/14i8zs1vva?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值