0

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

例如:

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

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

4

4 回答 4

8

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

var google = from p in ctx.dates
             where p.effDate.CompareTo("20121212") < 0
             && p.effDate.CompareTo("20101212") > 0
             select p;
于 2012-12-17T11:39:52.113 回答
1

首先,您不能仅通过将日期转换为 int 来比较日期,因为在大多数情况下它会失败。DateTime Parse使用or解析你的字符串ParseExact并比较它们。

于 2012-12-17T11:41:39.230 回答
0

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

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

更好的方法是更改​​数据库以将日期存储在date非列charvarchar列中。

于 2012-12-17T11:42:44.040 回答
0

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

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

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

于 2012-12-18T12:53:52.060 回答