2012-05-24 2 views
1

С Entity Framework 4.3 и Linq я хочу сопоставить строку поиска с определенными свойствами содержащихся объектов, а также по свойствам дочерних объектов. Это, оказывается, довольно сложный запрос, хотя я не уверен, как это сделать. Например, одно свойство является целым числом, и мне не разрешено вызывать .ToString() в запросе Linq.Как искать через Entity Framework объекты и их детей?

Для того, чтобы дать вам представление о том, что я пытаюсь сделать, рассмотрим следующий пример кода:

var dbVersions = from ver in db.Versions 
       where ver.Name.Contains(search) || 
         ver.Children.Any(c=>c.Id.ToString().Contains(search)) 
       select ver; 

Как я должен осуществить этот поиск? Возможно, через хранимую процедуру?

Сервер базы данных SQL Server 2012.

ответ

5

Если вы хотите использовать LINQ, инфраструктура внутренне сделает правильную оптимизацию, и по моему опыту результаты будут вполне удовлетворительными. Если вы не хотите использовать хранимую процедуру и придерживаться LINQ держать все это в вашем использовании кода класса:

SqlFunctions.StringConvert((double)c.Id) 

для преобразования ИНТА в строку. Обратите внимание, что нет перегрузки для int, поэтому вам нужно отдать его в двойное или десятичное.

+0

Я понятия не имел, что SqlFunctions существует, и этого было достаточно, чтобы решить мою проблему! На данный момент я буду довольствоваться Linq, так как это экономит много времени по сравнению с тем, чтобы выяснить, как вводить хранимую процедуру. Благодаря! – aknuds1

1

В вашей ситуации я бы предложил использовать хранимую процедуру.

Если вы закончите прохождение одного поискового термина, который будет использоваться против нескольких столбцов, то вам лучше писать хранимую процедуру. Я когда-то пытался что-то подобное тому, что вы делаете, и конечный результат был действительно грязное заявлением LINQ, который оставил меня чувство грязного :)

Хорошая ссылка:

x.ToString() is not supported by the entity framework!

Вот exmaple о том, как использовать хранимые проки с EF:

http://blogs.msdn.com/b/bindeshv/archive/2008/11/20/using-stored-procedures-in-entity-framework.aspx

Не забудьте добавить хранимую процедуру, когда вы «Обновить модель из базы данных».

+0

Спасибо. Однако я никогда не сочетал хранимые процедуры с EF. Должен ли я определить его в модели (.edmx)? Некоторые подробности о том, как этот поиск может быть выполнен с помощью хранимой процедуры, были бы полезны :) – aknuds1

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