linqto 多个关键字模糊查询_Entity Framework Core Like 查询揭秘

本文详细介绍了在Entity Framework Core中如何使用EF.Functions.Like进行多个关键字模糊查询,对比了Like与Contains、StartsWith、EndsWith的区别。讨论了在SQL中的Like关键字支持通配符,而.NET中的字符串方法不支持,同时揭示了EF Core中StartsWith查询优化的原理,以及在EF 6中对通配符的处理方式。
摘要由CSDN通过智能技术生成

在Entity Framework Core 2.0中增加一个很酷的功能:EF.Functions.Like(),最终解析为SQL中的Like语句,以便于在 LINQ 查询中直接调用。

不过Entity Framework 中默认提供了StartsWithContainsEndsWith方法用于解决模糊查询,那么为什么还要提供EF.Functions.Like,今天我们来重点说说它们之间的区别。

表结构定义

在具体内容开始之前,我们先简单说明一下要使用的表结构。

    public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }

public override string ToString()
{
return $"{ nameof(CategoryID)}: {CategoryID}, { nameof(CategoryName)}: {CategoryName}";
}
}

在 Category 类型定义了两个字段:CategoryIDCategoryName

    public class SampleDbContext : DbContext
{
public virtual DbSet Categories { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("数据库连接字符串");base.OnConfiguring(optionsBuilder);
}protected override void OnModelCreating(ModelBuilder modelBuilder)
{ base.OnModelCreating(modelBuilder);
EntityTypeBuilder entityTypeBuilder = modelBuilder.Entity();
entityTypeBuilder.ToTable("Category");
entityTypeBuilder.HasKey(e => e.CategoryID);
entityTypeBuilder.Property(e => e.CategoryID).UseSqlServerIdentityColumn();
}
}

我们使用 SampleDbContext 来访问数据库。

CategoryID CategoryName
1 Clothing
2 Footwear
3 Accessories

在数据库的 Category 表中插入上面三行记录。

EF.Functions.Like 使用示例

我们来看一个EF.Functions.Like()查询示例,查询 CategoryName 字段中包括字符串 “t” 的数据,传递的参数是 “%t%”

        [Fact]
public void Like()
{
using (var dataContext = new SampleDbContext()) {

var result= dataContext.Categories.Where(item => EF.Functions.Like(item.CategoryName, "%t%")).ToList();

foreach (var item in result) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值