在linq搜索中使用int.parse(string)不起作用

时间:2012-12-17 11:38:06

标签: c# visual-studio-2010 linq sdf

我在C#中使用LINQ搜索。我的其中一项搜索需要将string转换为int。 当我尝试使用int.parse()convert.toInt32()时,它会显示错误(在LINQ中无法识别)

例如:

var google = from p in ctx.dates
       where int.Parse(p.effDate) < 20101212 && int.Parse(p.effDate) > 20121212
           select p;

正如您所看到的,我有一个字符串,其中包含yyyymmdd格式的日期,我想将其转换为整数,以便我可以在这些日期之间进行搜索。

4 个答案:

答案 0 :(得分:8)

yyyyMMdd格式有一个很好的属性,字典顺序与时间顺序相同,所以你可以使用字符串比较:

var google = from p in ctx.dates
             where p.effDate.CompareTo("20121212") < 0
             && p.effDate.CompareTo("20101212") > 0
             select p;

答案 1 :(得分:1)

首先,您无法通过将日期转换为int来比较日期,因为在大多数情况下它会失败。使用DateTime ParseParseExact解析字符串并进行比较。

答案 2 :(得分:0)

那是因为int.Parse是客户端调用,Linq提供程序不知道如何将其映射到数据库函数。

由于字符串采用易于排序的格式,因此您可以使用where p.effDate < "20101212" && p.effDate > "20121212"

更好的方法是更改​​数据库,将日期存储在date列而不是charvarchar列。

答案 3 :(得分:0)

最终我找到了一个不错的答案:

 google = from p in ctx.dates
 where p.effDate.CompareTo(picker1) > 0 && p.effDate.CompareTo(picker2) <0 
select p; 

picker1和picker2都是“yyyymmdd”中的字符串 谢谢大家的帮助