字符串比较大小,CompareTo来搞定!

很简单的例子,在Sql中我么可以轻松的实现字符串的比较,但是我们在Linq,Lambda中似乎没有。其实不然,我们可以用CompareTo来实现!

比如下面的SQL例子:

 

但是我们如何在C#中去实现了,我也想了很久,平时没比较过字符串,本人可能也比较菜,还是问了问,组长,它告诉我可以比较的,用CompareTo就可以。

 PredicateList<Card_Kaoshi> predict = new PredicateList<Card_Kaoshi>();
 if (string.IsNullOrEmpty(form["startCardNum"]))
  {
      predict.Add(i => i.CardNum.CompareTo(form["startCardNum"].toString()) >= 0);
}
if (!string.IsNullOrEmpty(form["endCardNum"])) { predict.Add(i => i.CardNum.CompareTo(form["endCardNum"].toString()) <= 0); }

 错误一:测试了一下,上面的代码会报一个错误。

错误如下,我猜测这个错误的原因可能是 form["endCardNum"]放在Linq中,测试的它值还没有出来:

“LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式。”

看到此错误,你可能认为是toString()的原因,其实不然,去掉toString()还是会报一个错误,因为Linq不支持ToString()函数。

i.CardNum.CompareTo(form["endCardNum"])也会报错,我猜测可能是 form["endCardNum"]测试的它还不是一个值,还得调用内部方法get_Item去获得,而Linq只能与定值进行比较。所以先要转成值,string sCardNum = form["startCardNum"];

i.CardNum.CompareTo(value(TsingDa.YiBa.Background.Controllers.Card_KaoshiController+<>c__DisplayClass2).form.get_Item("startCardNum")) >= 0

错误二:错误如下:

LINQ to Entities 不识别方法“System.String get_Item(System.String)”,因此该方法无法转换为存储表达式。

 

解决方法如下,由本人亲测,最终实现了想要的答案

 PredicateList<Card_Kaoshi> predict = new PredicateList<Card_Kaoshi>();
 if (!string.IsNullOrEmpty(form["startCardNum"]))
 {
    string sCardNum = form["startCardNum"];
    predict.Add(i => i.CardNum.CompareTo(sCardNum) >= 0); //i => i.CardNum.CompareTo(sCardNum) >= 0 这句话就相当于 cardnum >= sCardNum
 }
if (!string.IsNullOrEmpty(form["endCardNum"])) { string eCardNum = form["startCardNum"]; predict.Add(i => i.CardNum.CompareTo(eCardNum) <= 0); //i => i.CardNum.CompareTo(eCardNum) <= 0 这句话就相当于 cardnum <= eCardNum }

 

 

 

 

转载于:https://www.cnblogs.com/Kummy/archive/2013/05/16/3081913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,字符串CompareTo() 方法用于比较两个字符串,并返回一个整数值,表示比较结果的大小关系。该方法有多个重载形式,其中一个重载形式允许指定比较规则。 默认情况下,CompareTo() 方法使用当前文化(Culture)下的比较规则进行字符串比较。这意味着,如果在不同的文化环境中使用该方法进行字符串比较,可能会得到不同的结果。 可以使用 StringComparison 枚举类型中的成员来指定不同的比较规则,例如: - StringComparison.CurrentCulture:使用当前文化的比较规则进行字符串比较。 - StringComparison.InvariantCulture:使用固定文化(Invariant Culture)的比较规则进行字符串比较,这种比较方式不受当前操作系统文化设置的影响。 - StringComparison.Ordinal:按照字符的 Unicode 值进行比较,不考虑语言和文化差异。 例如,以下代码使用当前文化的比较规则比较两个字符串: ```csharp string str1 = "apple"; string str2 = "banana"; int result = str1.CompareTo(str2); ``` 如果当前文化为英语(美国),则 result 的值为一个负整数,表示 str1 小于 str2。 如果要使用不同的比较规则进行字符串比较,可以将 StringComparison 枚举类型作为第二个参数传递给 CompareTo() 方法,例如: ```csharp string str1 = "apple"; string str2 = "banana"; int result = str1.CompareTo(str2, StringComparison.InvariantCulture); ``` 这将使用固定文化的比较规则进行字符串比较,不受当前操作系统文化设置的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值