ASP.NET CORE 使用EntityFramework对数据进行查询操作
本文最后更新于843 天前,其中的信息可能已经过时,如有错误请发送邮件到2192492965@qq.com
  1. 增加数据:
// 创建模型对象
var user = new User { Name = "John" };

// 添加到DbContext中
_dbContext.Users.Add(user); 

// 提交到数据库
await _dbContext.SaveChangesAsync();
  1. 删除数据:
// 查询对象
var user = await _dbContext.Users.FirstAsync(u => u.Id == 1);

// 从DbContext中移除
_dbContext.Users.Remove(user);

// 提交到数据库
await _dbContext.SaveChangesAsync();
  1. 修改数据:
// 查询对象
var user = await _dbContext.Users.FirstAsync(u => u.Id == 1);

// 修改属性
user.Name = "Sam";

// 提交更改
await _dbContext.SaveChangesAsync();
  1. 查询数据:
// 查询所有
var users = await _dbContext.Users.ToListAsync();

// 条件查询  
var user = await _dbContext.Users.FirstOrDefaultAsync(u => u.Name == "Tom");

​ 模糊查询

​ 在Entity Framework Core中可以通过以下几种方式实现模糊查询:

  • 在SQL查询中使用LIKE和通配符:
var results = context.Users.FromSqlRaw("SELECT * FROM Users WHERE Name LIKE {0}", $"%{searchTerm}%");
  • 使用EF.Functions.Like()方法:
var results = context.Users.Where(u => EF.Functions.Like(u.Name, $"%{searchTerm}%"));
  • 使用字符串方法Contains/StartsWith/EndsWith:
var results = context.Users.Where(u => u.Name.Contains(searchTerm));
var results = context.Users.Where(u => u.Name.StartsWith(searchTerm));
var results = context.Users.Where(u => u.Name.EndsWith(searchTerm));
  • 利用正则表达式实现模糊查询:
var results = context.Users.Where(u => Regex.IsMatch(u.Name, $"{searchTerm}"));
  • 使用全文索引实现全文搜索:
var results = context.Users.Where(u => u.Name.Matches(searchTerm));

所以主要是使用LIKE、Contains等方法以及正则表达式来实现模糊查询。

根据数据量大小、查询性能要求选择合适的方式。

  1. 统计查询:
// 统计总数
var total = await _dbContext.Users.CountAsync(); 

// 统计满足条件的数量
var total = await _dbContext.Users.CountAsync(u => u.Age > 20);

主要是通过DbContext提供的增删改查方法就可以对数据库进行操作。

  1. 反向查询

    1. 建立模型之间的导航属性

      例如,Post 和 Blog 模型:

      public class Post 
      {
      public int PostId { get; set; }
      public string Title { get; set; }
      
      public int BlogId { get; set; }
      public Blog Blog { get; set; } // 导航属性
      }
      
      public class Blog
      {
      public int BlogId { get; set; }
      public string Url { get; set; }
      
      public List Posts { get; set; } // 导航属性 
      }
    2. 通过导航属性进行查询

      示例:根据 Blog 查询其相关的 Posts

      // 查询Blog
      var blog = dbContext.Blogs.First(b => b.BlogId == 1);
      
      // 通过导航属性反向查询Post
      var posts = blog.Posts; 
      
      // 条件过滤
      var posts = blog.Posts.Where(p => p.Title.Contains("EF Core"));
  2. 分页查询

    在Entity Framework Core 中可以通过以下几种方式实现分页查询:

    • Skip()和Take()
    // 跳过50条,返回10条
    var page1 = context.Users.Skip(50).Take(10); 
    
    // 跳过100条,返回10条  
    var page2 = context.Users.Skip(100).Take(10);
    • Slice()方法
    // 从第3页(50条/页),返回10条
    var page3 = context.Users.Slice(2, 10);
    • 使用LINQ的SkipWhile和TakeWhile

    • 在SQL中使用ROW_NUMBER实现分页

    var page4 = context.Users
       .FromSqlRaw("WITH PagedData AS (SELECT *, ROW_NUMBER() OVER(ORDER BY Id) AS RowNum FROM Users) SELECT * FROM PagedData WHERE RowNum BETWEEN {0} AND {1}", skip, take);
    • 使用第三方分页库,如EntityFramework.PagingC
  3. 分组查询

    • GroupBy查询
    // 按Category分组  
    var groups = context.Products.GroupBy(p => p.Category);
    
    // 然后可以对组执行操作
    foreach(var group in groups)
    {
     Console.WriteLine($"{group.Key} has {group.Count()} products.");
    }
    • 在Select中使用GroupBy:
    var query = context.Products
       .GroupBy(p => p.Category)
       .Select(g => new { Category = g.Key, Count = g.Count() });
    • 哈夫表查询
    var results = context.Products
       .GroupBy(p => p.Category)
       .SelectMany(g => g.OrderByDescending(p => p.Price).Take(3));
    • 在SQL中使用GROUP BY
    var query = context.Products.FromSqlRaw("SELECT Category, COUNT(*) AS Count FROM Products GROUP BY Category");

    常用的分组操作包括GroupBy、在Select中子查询、哈夫表等。

如需执行更复杂的业务查询,可以使用FromSqlRaw、SqlQuery等直接运行SQL语句。

如果觉得本文对您有所帮助,可以支持下博主,一分也是缘?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
换装