2017-02-09 10 views
1

Чтобы быть ясным, я не имею в виду выполнение .Cast<T> по результатам вызова EF.Есть ли способ вставить в `Where` часть запроса Entity Framework?

Я пытаюсь выполнить частичный поиск в поле чисел.

При создании SQL скрипта, легко преобразовать столбец в другой тип данных:

SELECT Id 
FROM Employees 
WHERE CAST(Id AS VARCHAR) LIKE '%95%'; 

Есть ли какие-либо эквивалент в запросе LINQ?

Я не могу изменить типы данных в сущности, которую я запрашиваю, а Id был предназначен только для демонстрации.

+0

Может быть, [это] (http://stackoverflow.com/questions/158634/doing-a-cast-within-a-linq-query) вопрос может помочь вам – LeeonTM

+1

Вы можете посмотреть в класс 'SqlFunctions'. Он имеет ряд методов, которые напрямую поддерживаются поставщиком LINQ. Я не знаю, имеет ли он метод «Cast» или «Convert». IIRC, он имеет 'StringConvert' – Amy

+1

Этот SQL-запрос на самом деле является ошибкой. Если вам нужно преобразовать Id, который не должен иметь делового значения, в строку *, чтобы вы могли выполнять текстовый поиск, что-то очень не так. По крайней мере, вам придется сканировать всю таблицу, так как поиск приклада и подстановочных знаков предотвращает использование индексов. –

ответ

4

Я не знаю, почему ToString не работает, но это то, что работает для меня. Без необходимости SqlFunctions:

  context.Employees.Where(emp => emp.Id.ToString().Contains("95")).ToList(); 
+0

Да, ты прав. Виноват. – krillgar

1

Если вы не можете найти SqlFunctions решение, всегда есть ExecuteQuery

var ids = db.ExecuteQuery<int>("SELECT Id FROM Employees WHERE CAST(Id AS VARCHAR) LIKE '%{0}%'", "95") 

(Это не может быть точно правильно для параметра.)
+0

В большинстве случаев я соглашаюсь и принимаю это. Тем не менее, в моем конкретном случае существует множество других фильтров и вещей, которые могут привести к слишком сложной обработке запроса. Я прошу прощения за то, что не заявляю, что в вопросе, однако, я хочу сосредоточить внимание на точной проблеме. Это определенно поможет другим! Благодарю. : D – krillgar