0

我正在做一个搜索索引。我让它工作得很好,但我无法在我的搜索中合并 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
         {

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

4

5 回答 5

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)) 
于 2012-10-25T15:18:28.350 回答
1

应该只是:

t0.ItemID.Equals(int.Parse(txtSearch.Text.Trim()))
于 2012-10-25T15:18:28.503 回答
1
t0.ItemID.Equals(Int32.Parse(txtSearch.Text.Trim());
于 2012-10-25T15:18:38.873 回答
1

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

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

于 2012-10-25T15:18:48.270 回答
1

您可以使用int.Parse

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

将会

int.Parse(t0.ItemName.Contains(txtSearch.Text.Trim()))
于 2012-10-25T15:19:21.647 回答