Linq to Entities查询无法将Int转换为String

时间:2012-10-25 15:17:00

标签: c# asp.net linq

我正在制作搜索索引。我得到它工作得很好,但我不能在我的搜索中包含ItemID(项目编号),因为我无法将TextBox.Text中的String转换为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
         {

我不确定如何转换或解析它仍然可以正常搜索。

5 个答案:

答案 0 :(得分:3)

string解析为int

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

或将int转换为string

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)) 

答案 1 :(得分:1)

应该只是:

t0.ItemID.Equals(int.Parse(txtSearch.Text.Trim()))

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果您确定它是有效整数,则可以使用int.Parse。如果您不确定它是否是有效整数,您可以使用int.TryParse并可能提示用户重新输入,如果它无效。

通常最好在构建查询之前验证所有项目(检查数字是数字,日期是日期,选择值是有效选择等)。如果某些内容无效,您可以通过在开始时检查它来为自己保存数据库查询。

答案 4 :(得分:1)

您可以使用int.Parse

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

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