Передать 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);
    }
}
→ Ссылка