2015-09-16 3 views
0

это мой запрос:Найти ИНТ в базе Entity Framework

var caly = from m in stan.magazyn 
      from g in stan.gdzie 
      from p in stan.pracownik 
      where m.Gdzie_Jest == g.ID_Miasta 
      where m.Kto_Wprowadzil == p.ID_Pracownika 
      where m.Gdzie_Jest == combobox_miasto 
      orderby m.Marka, m.Model, m.IMEI 
      where (m.ID.Contains(textBox13.Text)) 
        || (m.Marka.Contains(textBox13.Text)) 
        || (m.Model.Contains(textBox13.Text)) 
        || (m.IMEI.Contains(textBox13.Text)) 
        || (m.Kolor.Contains(textBox13.Text)) 
        || (m.Od_Kogo.Contains(textBox13.Text)) 
        || (m.Info.Contains(textBox13.Text)) 
      select new { m.ID, m.Marka, m.Model, m.IMEI, m.Kolor, m.Od_Kogo, Sklep = g.Nazwa, m.Data_Wprowadzenia, m.Cena_Kupna, Dodał = p.login, m.Info }; 

, если я могу сделать это: (m.Marka.Contains(textBox13.Text)) и дальше, это нормально, потому что в моей базе это строка. У меня проблема, когда я хочу найти ID (m.ID.Contains(textBox13.Text)), потому что это целое число. что я должен делать в этой ситуации?

+0

Объясните _ «ИД поиска» _. Если пользователь вводит «1», вы хотите найти запись с идентификатором 1, а также 10, 11, 12 и т. Д.? – CodeCaster

+0

Если я поставлю «1», я хочу видеть ID 1, 11, 15, 21,31,5551,133,412 и т. Д. И другие данные, например, модель «nokia 3310». – SSJ

+0

если я положил «3310», я хочу увидеть, например, id 3310, модель 3310 и, возможно, IMEI 33104234823942 и 555331055555 – SSJ

ответ

2

Вам необходимо преобразовать значение textBox13.Text в строку. В идеале вы должны использовать int.TryParse:

int value = 0; 
if(!int.TryParse(textBox13.Text,out value)) 
    throw new InvalidOperationException("textBox13 must contain a number"); 

, а затем

(m.ID.Contains(value)) 

(примечание стороны: дайте ваше Textboxes значимых имен - textBox13 ничего не значит!)


Edit: Благодаря @CodeCaster который указал на почти определенную проблему с вышеизложенным, - чтобы ваше текстовое поле можно было использовать для поиска строковых полей или - в этом случае вы, вероятно, не хотите генерировать исключение, если разбор текстового поля на целое не выполняется.

Если это так, вы, вероятно, хотите две вещи

  1. логическое значение, указывающее, действительно ли у вас есть номер
  2. Значение строки разобран на ряд

Например

int value = 0; 
bool isNumericalSearch = int.TryParse(textBox13.Text,out value)); 

Эти значения затем могут использоваться как часть вашего поискового запроса:

where (isNumericalSearch && m.ID == value) 
       || ((m.Marka.Contains(textBox13.Text)) 
       || (m.Model.Contains(textBox13.Text)) 
       || (m.IMEI.Contains(textBox13.Text)) 
       || (m.Kolor.Contains(textBox13.Text)) 
       || (m.Od_Kogo.Contains(textBox13.Text)) 
       || (m.Info.Contains(textBox13.Text))) 
+0

OP имеет текстовое поле бесплатного поиска, которое должно использоваться во всех полях. Поэтому, если пользователь вводит «fooproduct», вы не хотите бросать. – CodeCaster

+1

@CodeCaster Я получаю вашу точку зрения, но вы просто предполагаете, что она указана в любом месте? – Jamiec

+1

Если вы посмотрите на код OP, вы увидите кучу ors ('||'). Например, есть также поле IMEI и Color. При поиске «красного», вы не хотите бросать. Но, конечно, ОП не уточнил это. Дело не в этом. – CodeCaster

1

вы можете использовать SqlFunction класс для преобразования вашего int в string.

сделать Somthing как:

(SqlFunctions.StringConvert((double)m.ID)).Contains(textBox13.Text) 
0

Вам просто нужно привести значение входного textBox13.Text в междунар (назовем его textBox13Integer), то вы можете использовать m.ID.Equals(textBox13Integer) или m.ID == textBox13Integer для того, чтобы найти свой результат по идентификатору.

Смежные вопросы