Linq Query для int с использованием строки

Я пытаюсь запросить уникальный ссылочный номер таблицы, используя Linq to Entities. Идентификатор предоставляется через текстовое поле и, следовательно, строку в моем коде. Очевидно, что в таблице базы данных поле представляет собой целое число, поэтому я попытался сначала использовать .ToString, а затем .Contains так же, как и с varchar(). Похоже, это не работает, ошибка возникает из-за метода .ToString.

Как ты делаешь это? Я попытался преобразовать содержимое текстовых полей в целое число, но это означает, что пользователю придется вводить точное целое число вместо частичного числа.

Огромное спасибо


person Sam Heller    schedule 27.07.2009    source источник
comment
Приведите пример запросов LINQ, которые у вас НЕ работают.   -  person Eric Schoonover    schedule 27.07.2009


Ответы (2)


Я не уверен, почему 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
person HuBeZa    schedule 27.07.2009
comment
Хотя код будет нормально работать для linq-to-objects, как показывает ваш код, Linq-to-entities может не понравиться, поскольку он может не слишком хорошо переводиться в SQL, в который выражение будет преобразовано в случае OP. - person spender; 27.07.2009

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

Что вы подразумеваете под «частичным» значением? Что бы вы ни «добавляли» к предоставленной пользователем строке, вы все равно можете сделать это до того, как проанализируете значение. Ваше объяснение не очень понятно.

Если вы действительно пытаетесь выполнить поиск по подстановочным знакам, это не удастся с использованием Linq-to-entities против значения DB int. Я сомневаюсь, что lte будет иметь большой смысл в sometable.intvalue.ToString().Contains(). В этом случае вам может потребоваться выполнить некоторые математические вычисления на стороне клиента, чтобы выяснить, какие диапазоны необходимо получить, или написать хранимую процедуру, которая выполняет поиск в конце SQL.

person spender    schedule 27.07.2009
comment
Я предполагаю, что он имеет в виду, что хочет иметь возможность ввести 12 и получить обратно 12 121 и 1234... (а может быть, даже 312?) - person Benjol; 27.07.2009