【问题标题】:Entity Framework 4: SQL to Linq: How to select strings that are not uppercase?实体框架 4:SQL 到 Linq:如何选择不是大写的字符串?
【发布时间】:2011-01-11 17:41:32
【问题描述】:

此 SQL 选择所有非大写的名称:

select name
from   myTable
where  not (UPPER(name) = name collate Latin1_General_BIN )

你会如何在 Linq(Entity Framework 4)中做同样的想法?

编辑:

String.Compare 和 string = string 都解析为不区分大小写的UPPER(name) = name 的 SQL。

【问题讨论】:

    标签: linq sql-server-2005 entity-framework-4


    【解决方案1】:

    它不是纯 LINQ,但你可以使用 ExecuteQuery,例如

     string sql = @"
         select id , name 
         from   myTable
         where  not (UPPER(name) = name collate Latin1_General_BIN )
      ";
    
    var results = 
       (from r in dc.ExecuteQuery<myTable>(sql) 
        select  new { r.Name } 
       ).ToList();
    

    注意,您需要在查询中包含 id,即使您只需要名称。

    【讨论】:

    • 那行得通。 TYVM。我将不得不为 做一个自定义类,并添加所有必需品,如 skip 和 take 到 SQL 语句,否则它将尝试在本地获取所有记录。很酷。
    【解决方案2】:

    您可以使用 ToUpper() 方法将字符串转换为大写,例如

    entities.Where(x => x.Name != x.Name.ToUpper()).Select(x => x.Name)
    

    显然,您应该考虑是否需要为ToUpper() 方法提供特定的CultureInfo,以及是否要进行文化特定比较而不是使用!= 运算符。

    【讨论】:

    • 问题在于没有 collat​​e Latin1_General_BIN,比较不区分大小写。您的代码生成 SELECT [t0].[Name] AS [Name] FROM [entities] AS [t0] WHERE [t0].[Name] = UPPER([t0].[Name]) 选择所有项目,无论大小写。我肯定在研究特定文化的比较,这可能是答案。
    • aha 当然 - 我一直忘记 SQL 端的不区分大小写(这些天我与 SQL 服务器有点脱节!) - 我很想知道你是否管理找到一种方法来使用 CultureInfo 在 SQL 中强制执行所需的操作。显然 sgmoore 的答案有效,但它的缺点是需要显式 SQL 操作。
    【解决方案3】:

    我不完全理解你想要达到的目标。

    一般来说,Entity Framework 和 ADO.NET 的模式与 SQL Server 不同。 如果您想在查询中坚持使用语法,请创建存储过程或 UDF 并将其移植到 EF。

    我尝试使用 LINQ 执行它,但没有找到方法,因为 LINQ 的 EF SQL 生成不区分大小写! 所以我猜你必须用 UDF 或 SPROC 来做。

    更新:

    我现在必须离开,但我认为这篇文章可能会对您有所帮助: Unicode characters causing issues in SQL Server 2005 string comparison

    【讨论】:

    • SP、视图等很不错,但需要增加复杂性。您的代码解析为 SELECT [t0].[Title] FROM [context] AS [t0] WHERE [t0].[Title] = UPPER([t0].[Title]) 不区分大小写搜索。
    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2011-04-25
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多