【问题标题】:Using the like keyword with linq [duplicate]在 linq 中使用 like 关键字 [重复]
【发布时间】:2012-03-12 13:34:13
【问题描述】:

可能重复:
How to do SQL Like % in Linq?

我正在使用 mvc 3 和实体框架。我如何使用 linq 或 lambda 表达式进行类似搜索。请帮忙

【问题讨论】:

    标签: entity-framework linq sql-like


    【解决方案1】:

    由于目标是将 EF 表达式解析为 SQL,应在其中应用 LIKE 谓词,因此至少有 3 种方法可以做到这一点,具体取决于您希望将 % 通配符放在哪里

    C#:

    .Where(customer => customer.Name.StartsWith("Bloggs"))
    

    =>SQL

     WHERE c.Name LIKE 'Bloggs%'
    

    C#:

    .Where(customer => customer.Name.Contains("Bloggs"))
    

    =>SQL

    WHERE c.Name LIKE '%Bloggs%'
    

    C#:

    .Where(customer => customer.Name.EndsWith("Bloggs"))
    

    =>SQL

    WHERE c.Name LIKE '%Bloggs'
    

    如果适用,StartsWith 应该优先于其他两个,因为它更有可能在列上使用索引。 (%x% 通常会导致索引或表扫描)。

    【讨论】:

    • 我刚刚使用了 contains,它起作用了。如果我不包含开头和结尾的代码,它会中断吗?
    • Contains 可以工作/涵盖所有情况,但会生成 SQL: LIKE '%Bloggs%' 这通常会导致索引扫描/表扫描。如果您知道您的搜索以单词开头,那么在 SQL 中,like 'Bloggs%' 将比 '%Bloggs%' 快得多(前提是它被正确索引)。 AFAIK EndsWith(即“%Bloggs”)对 SQL 索引不是很有用
    • 如果是不区分大小写的搜索,我们需要自己手动应用大写或小写,就像在 sql 中所做的那样对吗?
    • Linq 表达式被转换为 Sql,因此过滤谓词将应用到数据库中。因此,过滤器是否区分大小写取决于数据库中列的排序规则。
    【解决方案2】:

    它与 - LIKE operator in LINQ 重复 How to do SQL Like % in Linq?

    通常您使用 String.StartsWith/EndsWith/Contains。例如:

    var Code = .Where(p => p.Code.Contains("BALTIMORE"))
    var Code = .Where(p => p.Code.StartsWith("BALTIMORE"))
    var Code = .Where(p => p.Code.EndsWith("BALTIMORE"))
    

    【讨论】:

    • 我刚刚使用了 contains,它起作用了。如果我不包含开头和结尾的代码,它会中断吗?
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多