【问题标题】:EF Core - Filter a list by category name - ignore casingEF Core - 按类别名称过滤列表 - 忽略大小写
【发布时间】:2020-08-10 03:08:16
【问题描述】:

我有以下数据库:

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

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 作为输入,我们应该得到恐怖、神秘或戏剧类别的书(无论在数据库中它们是恐怖、神秘、戏剧,反之亦然)。我不确定我的想法是否好以及如何完成它。提前谢谢!

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, ) ));
}

【问题讨论】:

  • 您接受了一个很好的答案,但您知道如何完成查询本身吗?
  • @GertArnold,不,我没有。不过感谢您的回复!
  • @GertArnold,你能帮帮我吗?
  • 可能类似于bc => categories.Contains(bc.Category.Name)

标签: c# linq entity-framework-core entity


【解决方案1】:

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

默认情况下,SQL Server 不区分大小写,因此如果您没有更改此设置,应该没问题。

但是....

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

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

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

您可以在这里阅读更多内容:EF Core 3.0 translating string.Equals ordinalIgnoreCase correctly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多