2009-07-27 71 views
2

我想查詢使用Linq to Entities的表的唯一引用號。該ID通過文本框提供,因此在我的代碼中提供了一個字符串。很顯然,在數據庫表中,這個字段是一個整數,所以我嘗試過使用.ToString,然後.Contains以與varchar()相同的方式使用。這似乎不起作用,錯誤來自.ToString方法。Linq使用字符串int的查詢

你是如何做到這一點的?我試圖將文本框內容轉換爲整數,但這意味着用戶將不得不輸入確切的整數而不是部分數字。

非常感謝

+2

提供一個不適合您的LINQ查詢的示例。 – 2009-07-27 12:41:49

回答

-1
int value; 
if(int.TryParse(someTextString,out value)) 
{ 
    //do work here using integer comparision with 'value' 
} 

不管你說的 「部分」 的價值呢?無論你是「添加」到用戶提供的字符串,你仍然可以在分析值之前做。你的解釋不是很清楚。

如果您確實試圖進行通配符搜索,則使用Linq-to-entities對數據庫int值進行失敗。我懷疑lte會對sometable.intvalue.ToString()。Contains()產生多大的意義。在這種情況下,您可能需要執行一些客戶端數學計算,以找出需要檢索的範圍,或者編寫一個在SQL端進行搜索的存儲過程。

+0

我想他的意思是他想要能夠輸入「12」並返回「12」「121」和「1234」......(甚至mayb甚至「312」?) – Benjol 2009-07-27 12:52:56

1

我不確定爲什麼toString不要爲你工作。我試過這個方法。兩者都返回了答案:

List<int> ids = new List<int>() { 111, 211, 311, 422, 522, 622, 733, 833, 933 }; 
string query = "11"; 

var result = ids.Where(id => id.ToString().Contains(query)); 
var result2 = ids.ConvertAll<string>(i => i.ToString()).Where(id => id.Contains(query)); 
// Both return the first three items 
+3

雖然代碼對於linq-如你的代碼演示的那樣,Linq-to-entities可能不喜歡這樣做,因爲它可能無法很好地轉換爲SQL,這是表達式將在OP中轉換爲的情況。 – spender 2009-07-27 14:26:05