【问题标题】:Linq, how to search French accentsLinq,如何搜索法语口音
【发布时间】:2013-08-15 19:02:56
【问题描述】:

我有类似的 SQL 查询

select * from user where firstname like '%Je%' collate SQL_Latin1_General_CP1_CI_AI 

Linq 能做这样的事情吗?

我可以使用 ExecuteStoreQuery,但想知道 Linq 是否可以这样做。谢谢。

【问题讨论】:

    标签: database linq entity-framework


    【解决方案1】:

    法语口音应该没问题

    var results = from u in _context.User
              where u.firstname.Contains("é")
              select u
    

    【讨论】:

    • 用户搜索时,有时会输入“e”,但他们想找到“é”。
    • @DanielZ 您可以替换用户输入字符串中的字符。
    • 用户搜索“oe”时,需要找到“Joe”和“Joé”
    【解决方案2】:

    添加一个应用排序规则的 SQL 视图怎么样?

    例如,

    CREATE VIEW UserSearch AS
        SELECT *
            , FirstName collate SQL_Latin1_General_CP1_CI_AI AS FirstNameSearch 
        FROM User
    

    那你就可以了

    var results = from us in _context.UserSearch
                  where us.FirstNameSearch.Contains("é")
                  join u in _context.User on us.UserId equals u.UserId
                  select u
    

    【讨论】:

    • 这不是 Linq 方式。相比使用视图,使用 ExecuteStoreQuery 更容易。
    • View 只需执行一次,然后您就可以在 LINQ 中使用它。 ExecuteStoreQuery 无法进行组合。如果你只想要一两列怎么办?现在您必须从数据库中获取所有列,而 VIEW/LINQ 将适当地转换查询。同样,您不能在 ExecuteStoreQuery 上加入,如果您在之后应用 where 子句,它仍然会引入整个结果集,而不是将其应用到数据库中。
    • 无论如何,如果您希望数据是这样整理的,为什么不在表格中以这种方式设置整理?
    • 感谢回复,我只想知道Linq能做到吗,我用视图、存储过程或查询都没有问题。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多