2014-01-19 2 views
1

Как добавить исходный sql, например. условие для выражения linq-объекта?Как добавить запрос sql в Entity Framework

Я открыт для всех предложений, поэтому необязательно добавлять его в основной запрос LINQ, например. фильтр, добавив некоторые пользовательские sql для запроса в целом.

+0

Просто следить за мои исследования и последнего ответ от команды EF, да, вы можете использовать перехватчики, чтобы сделать работу, но это очень трудно сделать, не говоря уже о непрактично и inefficient.It будет хорошо иметь поле выражения для упрощения инъекций, как и другие ORM, которые я использую. – khorvat

ответ

0

Используя IQueryable, мы можем добавить условие в запрос Linq к объекту.

private IQueryable<Customer> FilterList(IQueryable<Customer> customer, List<string> filter, string filterValue) 
      { 
       IQueryable<Customer> query = new List<Customer>().AsQueryable();    

       if (filter == null || string.IsNullOrEmpty(filterValue)) 
       { 
        return customer; 
       } 

       var filterLower = filter.First().ToLower(); 

       filterValue = filterValue.ToLower(); 

       if (filterLower.Contains("retail") || (filterLower.Contains("distributor")) 
       { 
        return customer.Where(x => (!string.IsNullOrEmpty(x.Retail) && x.Retail.Contains(filterValue)) || (!string.IsNullOrEmpty(x.Distributor) && x.Distributor.Contains(filterValue))); 
       } 

       if (filterLower.Contains("retail")) 
       { 
        query = customer.Where(x=> !string.IsNullOrEmpty(x.Distributor) && x.Distributor.Contains(filterValue)); 
       } 

       if (filterLower.Contains("distributor")) 
       { 
        query = customer.Where(x => !string.IsNullOrEmpty(x.Retail) && x.Retail.Contains(filterValue)).Union(query); 
       } 
       return query; 
    } 
+2

Да, это было бы так, если бы я знал, что это объект Customer, я больше думал о том, чтобы помещать raw sql вместо поля. – khorvat

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