2012-12-17 65 views
0

我在C#中使用LINQ搜索。我的一個搜索需要將string轉換爲int。 當我嘗試使用int.parse()convert.toInt32(),它會顯示一個錯誤(LINQ無法識別)在linq搜索中使用int.parse(字符串)不起作用

例如:

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

,你可以看到我有一個包含我的日期yyyymmdd格式的字符串和我想將其轉換爲整數,以便在這些日期之間進行搜索。

+0

如何日期是2010年前2012年後?你有這些日期混合起來嗎? –

+0

ü正確它應該是int.Parse(p.effDate)> 20101212 && int.Parse(p.effDate)<20121212 ..但它不會改變我的問題。 –

回答

8

yyyyMMdd格式有一個很好的特性,即按字典順序是一樣的時間順序排列,以便您可以使用字符串比較:

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

感謝您的快速回答。我試過這個,但得到一個錯誤說:「錯誤運算符'<'不能應用於'string'和'string'類型的操作數」 –

+1

@ Adir.el與p.effDate.CompareTo(「 20101212「)<0' – 2kay

+0

finaly我找到了一個體面的答案: google = from p in ctx.dates where p.effDate.CompareTo(picker1)> 0 && p.effDate.CompareTo(picker2)<0 選擇p; picker1和picker2都是「yyyymmdd」中的字符串 謝謝大家幫助我 –

1

由於第一你不能只是將它們轉換成int比較日期,因爲它在大多數情況下會失敗。使用DateTimeParseParseExact解析您的字符串並進行比較。

0

這是因爲int.Parse是客戶端調用,Linq提供程序不知道如何將它映射到數據庫函數。

由於字符串的格式很容易排序,所以可以使用where p.effDate < "20101212" && p.effDate > "20121212"

更好的方法是將數據庫更改爲在date列中存儲日期,而不是charvarchar列。

0

finaly我找到了一個不錯的答案:

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

picker1和picker2是「年月日」兩個字符串 謝謝大家對我的幫助