Stavo tentando di creare dinamicamente un predicato Dove per una query LINQ2SQL:Differenza tra i sovraccarichi di Expression.Call?
...Where(SqlMethods.Like(r.Name, "%A%") ||
SqlMethods.Like(r.Name, "%B%") ||
SqlMethods.Like(r.Name, "%C%") || ...)
A, B, C, ecc provengono da alcune serie. Così ho provato la seguente:
var roleExpression = Expression.Parameter(typeof(Role), r);
var nameExpression = Expression.Property(roleExpression, "Name");
var termExpression = Expression.Constant("%" + term[i] + "%");
var likeExpression = Expression.Call(
typeof(SqlMethods), "Like",
new[] { typeof(string), typeof(string) }, nameExpression, termExpression);
Tuttavia, l'ultima linea non riesce con il messaggio Nessun metodo di 'Like' su di tipo 'System.Data.Linq.SqlClient.SqlMethods' è compatibile con gli argomenti forniti.
così ho provato la seguente riga:
var likeExpression = Expression.Call(null,
typeof(SqlMethods).GetMethod("Like", new[] { typeof(string), typeof(string) }),
nameExpression, searchTermExpression)
Questo funziona. Tuttavia, non capisco qual è la differenza tra queste due linee. Secondo me dovrebbero consegnare lo stesso risultato.
Qualcuno potrebbe spiegarlo?
Cordiali saluti,
Ronald Wildenberg
Non esiste un metodo SqlMethods.Like che accetta argomenti di tipo generico, quindi questa non può essere la differenza tra le due chiamate. –
Hai perso il punto della mia risposta ... è precisissimo *** perché *** di ciò che non riesce ... (tipo generico args) –
Ah, capisco. Come sempre, si tratta di leggere attentamente la documentazione. Grazie per la tua risposta. –