C# 类似.Net string.CompareOrdinal的Linq函数
我需要在linq查询中使用C# 类似.Net string.CompareOrdinal的Linq函数,c#,string,linq,entity-framework-4.1,comparison,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();
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();
字符串最大值;
字符串最小值;
var res=db.Table
.Where(c=>string.CompareOrdinal(c.Id,min)>=0)
.Where(c=>string.CompareOrdinal(c.Id,max)如果Id是字符串,则此解决方案有效,因此看起来Id是int。int无法与字符串进行比较。请将Id更改为字符串或将min/max更改为int以使其有效(并在int值之间使用简单的<和>)
顺便说一句:在1 where函数中检查最小值和最大值可以节省1次迭代。我的一位同事找到了一个解决方法,使用而不是
string min=“a”;
字符串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)='a')和([Extent1].[Id]您是否尝试过类似的方法..我的意思是..这可能会有帮助我认为代码应该给出一个编译错误“方法'CompareOrdinal'不重载1个参数”我已经更新了quistionFYI,这里有一个链接,指定了所有不兼容的字符串方法,谢谢你的回答。如果我使用Linq To Objects(L2O)上面的语句可以工作。但是在L2E中,提供程序无法将该语句转换为任何SQL。L2E使用不同的加载方式。当查询访问数据库时,两个Where
子句已经组合在一起。
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();
SELECT
[Extent1].[Id] AS [Id]
FROM [dbo].[Table] AS [Extent1]
WHERE ([Extent1].[Id] >= 'a') AND ([Extent1].[Id] <= 'z')