Sto usando Entity Framework Core (2.0) e ho il seguente dubbio.
Non sono sicuro di cosa succede quando faccio questo:
context.Customers.Where(c => MyCustomMethod(c));
bool MyCustomMethod(Customer c)
{
return c.Name.StartsWith("Something");
}
Si traduce in SQL senza problemi?
È diverso dalla scrittura:
context.Customers.Where(c => c.StartsWith("Something"));
In breve, sarò in grado di avvolgere le mie convalide per la clase Where all'interno di un metodo? Rompe la traduzione in SQL?
No, non puoi chiamare il tuo metodo personalizzato nella query EF LINQ, perché EF non sarà in grado di generare un albero di espressioni del metodo e quindi non può tradurlo in SQL.
Per ulteriori informazioni sugli alberi di espressione, fai riferimento al link seguente:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/
se hai bisogno di ottenere una stringa dal metodo puoi scrivere la stessa query in questo modo
from customer in contetx.Customer
let str = GetString()
where Name.Any(c=> c.StartsWith(str) )
select customer;
string GetString()
{
return "Something";
}
non so che questo è utile, ma questo può raggiungere