Seltsam, Linq to Entities Verhalten mit AsExpandable()

Betrachten Sie die folgenden Person Person:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Anhand der folgenden Expression (konstruiert mit PredicateBuilder) als die Kriterien:

var byName = PredicateBuilder.True<Person>().And(x => x.FirstName == "Chaim");

Wenn Sie angerufen werden, verwenden Sie die folgende syntax, die generierte SQL ist in Ordnung (die auch den WHERE - Anweisung):

ctx.Set<Person>().AsExpandable().Where(x => byName.Invoke(x));

Jedoch, wenn Sie angerufen werden, mit dieser etwas andere syntax, kein SQL WHERE beteiligt ist, und die Filterung wird durchgeführt, indem Enumerable.Where statt:

ctx.Set<Person>().AsExpandable().Where(byName.Invoke);

Irgendwelche Gedanken?

  • Dies ist extrem gefährlich. Ich rief Where(expression.Compile()) statt Where(x => expression.Invoke(x)). Später dann, nach der tracing-unsere Produktions-Datenbank für saugen, ich sehe select [every column] from Table; ohne where-Klausel. Der ehemalige kommt direkt von den docs!
InformationsquelleAutor haim770 | 2013-11-27
Schreibe einen Kommentar