EF Core - 按类别名称过滤列表 - 忽略大小写

EF Core - Filter a list by category name - ignore casing

我有以下数据库:

我尽可能使用导航属性。我的映射 class BookCategory 看起来像这样(我在每个实体中都有集合属性 - Book class 中的 BookCategories 属性, BookCategories 属性 在 Categories class):

public class BookCategory
{
    public int BookId { get; set; }
    public Book Book { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

我想按给定的类别列表获取书籍并忽略大小写。例如,如果我们有 horror mystery drama 作为输入,我们应该得到恐怖、神秘或戏剧类别的书籍(无论它们在数据库中是 HoRrOR、mYsTERY、DRAMA,反之亦然)。我不确定我的想法是否好以及如何完成它。提前谢谢!

public static string GetBooksByCategory(BookShopContext context, string input)
{
      string[] categories = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    
      var books = context.Books
                .Where(b => b.BookCategories.Any(bc => String.Equals(bc.Category.Name, ) ));
}

您需要确保您的排序规则配置正确(在数据库中),排序规则决定它是否区分大小写。这与 EF 无关:)

SQL 默认情况下,服务器不区分大小写,所以如果您没有更改它应该没问题。

然而....

可以在多个级别设置排序规则,因此您可能需要检查所有级别:

  • 服务器等级
  • 数据库级别
  • 列级别

这里有一个 link 显示如何检查排序规则:https://docs.microsoft.com/en-us/sql/relational-databases/collations/view-collation-information?view=sql-server-ver15

您可以在此处阅读更多内容: