我需要在 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/