Передать Expression> в запрос Entiity Framework
Пытаюсь передать Condition в функцию выборки, но похоже что-то делаю неправильно.
запрос должен получится примерно такой
Select * from Person P where exists ( select 1 from Event E where E.name = P.Name )
static void SomeDbRequest(Expression<Func<Person, bool>> condition, Expression<Func<DbEntities, Person, bool>> advancedCondition)
{
using (DbEntities db = new DbEntities())
{
var query = db.Set<Person>().AsQueryable();
var result1 = query.Where(condition).ToList();
//это работает
var result2 = query.Where(p => db.Set<Event>().Any(e => e.Author == p.Name));
//это тоже работает
var result2 = query.Where(x => advancedCondition.Compile().Invoke(db, x));
//это нет
//NotSupportedException: 'LINQ to Entities' does not recognize the method'Boolean Invoke(DbEntities, Person)',
//and this method cannot be translated into a store expression.'
}
}
static void Main(string[] args)
{
Expression<Func<Person, bool>> c1 = p => p.Name == "Peter";
Expression<Func<DbEntities, Person, bool>> c2 = (db, p) => db.Set<Event>().Any(e => e.Author == p.Name);
SomeDbRequest(c1, c2);
}
Заранее спасибо.
Ответы (1 шт):
Автор решения: Thomas Cook
→ Ссылка
коллега помог
static void Main(string[] args)
{
Func<DbEntities, Expression<Func<Person, bool>>> funky =
db =>
p => db.Set<Event>().Any(e => e.Author == p.Name);
SomeDbRequest(funky);
}
static void SomeDbRequest(Func<DbEntities, Expression<Func<Person, bool>>> advancedCondition)
{
using (DbEntities db = new DbEntities())
{
Expression<Func<Person, bool>> expression = advancedCondition(db);
var result2 = query.Where(expression);
}
}