c# - 类似 .Net string.CompareOrdinal 的 Linq 函数

标签 c# string linq entity-framework-4.1 comparison

我需要在 linq 查询中使用 string.CompareOrdinal(...) 比较字符串。

string max;
string min;

var res = db.Table
            .Where(c => string.CompareOrdinal(c.Id,  min) >= 0)
            .Where(c => string.CompareOrdinal(c.Id,  max) <= 0)
            .ToList();

代码抛出异常:

LINQ ti Entities does not recongnize the method 'Int32 CompareOrdinal(System.String, System.String)' method, and this method cannot be translated into a store expression.

表中有很多数据,所以我真的需要where子句。

有解决办法吗?

更新

试图判断两个字符串是否相等——是否区分大小写。

我正在尝试判断字符串是否在范围 内。 所以问题是

  • 有没有办法做到这一点 - 所以这适用于 L2E?

显然,我不能使用 string.CompareOrdinal

最佳答案

我的一位同事使用 string.Compare 找到了解决方法而不是 string.CompareOrdinal

string min = "a";
string max = "z";

 var res = db.Table
         .Where(c => string.Compare(c.Id, min, StringComparison.OrdinalIgnoreCase) >= 0)
         .Where(c => string.Compare(c.Id, max, StringComparison.OrdinalIgnoreCase) <= 0)
         .ToList();

这是生成的 SQL:

SELECT 
[Extent1].[Id] AS [Id]
FROM [dbo].[Table] AS [Extent1]
WHERE ([Extent1].[Id] >= 'a') AND ([Extent1].[Id] <= 'z')

关于c# - 类似 .Net string.CompareOrdinal 的 Linq 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15784340/

相关文章:

Python:将符号移动到字符串的开头?

java - 在 Java 中存储和访问字符串(通过使用数组)

linq - 使用 LINQ 进行编码是如何工作的?幕后会发生什么?

c# - 尝试从 Mono NUnit 测试中获取调试输出

c# - 在虚拟化列表框中延迟加载图像

string - Clojure 中惯用的字符串旋转

c# - 此场景的 LINQ 查询

c# - 如何知道哪个方法启动了工作线程

c# - 检查实体是否在 Code First 中的其他实体中有引用

c# - 使用 Linq 在 EF 中编辑用户时无法创建类型的常量值