2009-08-25 4 views
1

Я реализую функцию поиска для приложения, которое использует сущность framework. Существует несколько необязательных полей для поиска конкретной таблицы/представления базы данных. Каков наилучший способ реализовать такой поиск с помощью EF? Хранимая процедура? Или это можно сделать (реалистично) с помощью Linq?Entity Framework - dynamic sql

ответ

2

Вы можете быть в состоянии сделать это в LINQ достаточно легко. Всегда помните, что запросы LINQ связаны друг с другом:

var query = (from p in products 
      select p); 

if(field1 != null) 
{ 
    query = (from p in query 
      where p.Field1 = field1 
      select p); 
} 

if(field2 != null) 
{ 
    query = (from p in query 
      where p.Field2 = field2 
      select p); 
} 

foreach(Product p in query) 
{ 
    // ... 
} 
+0

Будет ли первоначальное определение «запроса» причина «выберите * из продуктов» должна быть выполнена? – Jeremy

+0

Нет. Запросы LINQ не перечислены (т. Е. Результаты не извлекаются из БД) до последнего момента. Вызовы просто накапливаются, а затем, когда вам нужно получить доступ к определенному элементу результата (или счету и т. Д.), Весь собранный запрос извлекается из БД. – kevingessner

0

Вы можете взглянуть на this article о динамическом создании объектов выражения лямбда для этого.

3

Общий шаблон для обработки дополнительных параметров поиска, чтобы сделать что-то вроде этого:

string p = null; 
var q = from o in dataContext.Products 
    where ((o.Name == p) || (p == null)) 
    select o;