Search code examples
c#.netentity-frameworkentity-framework-4expression-trees

Internal .NET Framework Data Provider error 1025


IQueryable<Organization> query = context.Organizations;

Func<Reservation, bool> predicate = r => !r.IsDeleted;

query.Select(o => new { 
    Reservations = o.Reservations.Where(predicate)
}).ToList();

this query throws "Internal .NET Framework Data Provider error 1025" exception but the query below does not.

query.Select(o => new { 
    Reservations = o.Reservations.Where( r => !r.IsDeleted)
}).ToList();

I need to use the first one because I need to check a few if statements for constructing the right predicate. I know that I can not use if statements in this circumstance that is why I pass a delegate as parameter.

How can I make the first query work?


Solution

  • While the other answers are true, note that when trying to use it after a select statement one has to call AsQueryable() explicitly, otherwise the compiler will assume that we are trying to use IEnumerable methods, which expect a Func and not Expression<Func>.

    This was probably the issue of the original poster, as otherwise the compiler will complain most of the time that it is looking for Expression<Func> and not Func.

    Demo: The following will fail:

    MyContext.MySet.Where(m => 
          m.SubCollection.Select(s => s.SubItem).Any(expr))
             .Load()
    

    While the following will work:

    MyContext.MySet.Where(m => 
          m.SubCollection.Select(s => s.SubItem).AsQueryable().Any(expr))
             .Load()