2012-10-25 142 views
0

我在製作搜索索引。我得到它工作得很好,但我不能在我的搜索中包含ItemID(項目編號),因爲我無法將TextBox.Text中的字符串轉換爲int以便它是一個可比較的類型。Linq to Entitites查詢無法將Int轉換爲字符串

var q = (from t0 in db.Item 
     join t1 in db.Categories on t0.CategoryID equals t1.CategoryID 
     join t2 in db.Divisions on t0.DivisionID equals t2.DivisionID 
     where t0.DivisionID == DDLInt && 
     //Contains 
     (t0.ItemName.Contains(txtSearch.Text.Trim()) || 
     t0.Email.Contains(txtSearch.Text.Trim()) || 
     t0.Description.Contains(txtSearch.Text.Trim()) || 
     t0.Phone.Contains(txtSearch.Text.Trim()) || 
     t0.ItemID.Equals(txtSearch.Text.Trim())) 
       //^This is the line where 
       // it breaks because it is not a comparable type 
     group t0 by new 
     { 

我不知道如何轉換或解析它,仍然有正確的搜索工作。

+0

我犯了一個錯誤對不起我新。這是說我使用Linq to Entities而不是Linq to SQL,但我對此感到困惑。但它不會讓我使用分析或轉換。 – jackncoke

+0

LINQ to Entities不能識別方法'Int32 ToInt32(System.String)'方法,並且此方法不能轉換爲存儲表達式.'是錯誤消息 – jackncoke

回答

3

要麼解析stringint

t0.ItemID.Equals(Convert.ToInt32(txtSearch.Text.Trim()))) 

或轉換intstring

t0.ItemID.ToString().Equals(txtSearch.Text.Trim())) 

或採取轉換出來的查詢:

int searchID; 
if !int.TryParse(txtSearch.Text.Trim(),out searchID) 
    searchID = -1; // set to an invalid ID 

var q = (from t0 in db.Item 
    <snip> 
    t0.ItemID.Equals(searchID)) 
+0

謝謝您的幫助! – jackncoke

1

應該簡單地說:

t0.ItemID.Equals(int.Parse(txtSearch.Text.Trim())) 
1
t0.ItemID.Equals(Int32.Parse(txtSearch.Text.Trim()); 
1

如果您確信這將是一個有效的整數,你可以使用int.Parse。如果您不確定它是否是有效整數,您可以使用int.TryParse,並可能提示用戶在無效時重新輸入。

通常最好在構建查詢之前驗證所有項目(檢查數字是數字,日期是日期,選擇值是有效的選擇等)。如果某些東西無效,可以通過在開始時檢查它來保存數據庫查詢。

1

您可以使用int.Parse

t0.ItemName.Contains(txtSearch.Text.Trim()) 

int.Parse(t0.ItemName.Contains(txtSearch.Text.Trim())) 
相關問題