Linq函数类似.Net string.CompareOrdinal

Jen*_*ter 4 c# linq string comparison entity-framework-4.1

我需要使用string.CompareOrdinal(...)linq查询内部来比较字符串.

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();
Run Code Online (Sandbox Code Playgroud)

代码抛出一个异常:

LINQ ti实体不会重新确定方法'Int32 CompareOrdinal(System.String,System.String)'方法,并且此方法无法转换为存储表达式.

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

有没有解决的办法?

更新

不是想要确定两个字符串是否相等 - 区分大小写.

我正在努力确定一个字符串是否在一个范围内.所以问题是

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

显然,我不能用 string.CompareOrdinal

Jen*_*ter 6

我的一位同事找到了一个使用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();
Run Code Online (Sandbox Code Playgroud)

这是生成的SQL:

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