2014-11-12 3 views
1

У меня есть пара функций Entity Framework, которые отличаются только от операторов, например.Передача функции сравнения в качестве параметра в Entity Framework

public int GetCountEqual(int i) 
{ 
    return Context.Entity.Where(e => e.Value == i).Count(); 
} 

public int GetCountLess(int i) 
{ 
    return Context.Entity.Where(e => e.Value < i).Count(); 
} 

public int GetCountLessOrEqual(int i) 
{ 
    return Context.Entity.Where(e => e.Value <= i).Count(); 
} 

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

Я думаю, что должно быть возможно каким-то образом передать оператор как выражение параметра/лямбда (поскольку они каноничны), но что бы я ни сказал, ve пробовал до сих пор по этим линиям приводит к печально известным «Тип узла выражения LINQ« Invoke »не поддерживается в LINQ to Entities». ошибка.

Любые подсказки относительно того, как передать функцию сравнения в качестве параметра, чтобы он мог быть переведен в SQL? Запрос должен выполняться на уровне базы данных, я не могу загрузить объекты в память, а затем запустить там лямбда ...

ответ

2
public int GetCount(Expression<Func<Entity, bool>> whereExpression) 
{ 
    return Context.Entity.Where(whereExpression).Count(); 
} 

int countEqual = GetCountEqual(e => e.Value == i); 
int countLess = GetCountEqual(e => e.Value < i); 
int countLessOrEqual = GetCountEqual(e => e.Value <= i); 
+0

Спасибо! Это отвечает на вопрос. Извините, вы еще не можете продвигать вас. Какой правильный формат задавать следующий вопрос? Измените его или задайте новый вопрос? Могу ли я передать только выражение на Func Entity? Или также что-то более прямо на струне? Поскольку мое выражение «whereExpression» должно работать с двумя строковыми свойствами Entity (в зависимости от их значений), я бы хотел передать лямбду на строку вместо выражения Expression on Entity. – Shuma

+0

ОК. Последующие публикации опубликованы на http://stackoverflow.com/questions/26901446/passing-a-comparison-function-and-value-as-parameters-into-entity-framework – Shuma

+0

@aducci, он не загружает все данные перед Count () вызов? – EduLopez

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