OK, donc je l'ai écrit la fonction suivante:ne peut pas lancer de générique pour obtenir LINQ clause where
private IQueryable<LogEntry> SelectAll<T>(IEnumerable<LogEntry> logEntries, List<Expression<Func<LogEntry, bool>>> whereClause)
{
var selectAllQuery = from l in logEntries select l;
if (whereClause != null)
{
foreach (Expression<Func<LogEntry, bool>> whereStatement in whereClause)
{
selectAllQuery = selectAllQuery.Where(whereClause);
}
}
}
Mais il ne compilera pas. Il renvoie une erreur quand il essaie de retourner quelque chose à « selectAllQuery » comme suit:
System.Collections.Generic.IEnumerable » ne contient pas une définition pour « Où » et la meilleure surcharge de méthode d'extension System.Linq .Enumerable.Where (System.Collections.Generic.IEnumerable, System.Func) » a des arguments invalides
J'ai essayé ce casting dans tous les sens que je peux penser en vain. Dans le code ci-dessus, l'exécution de l'instruction select initiale renvoie selectAllQuery
de type System.Linq.Enumerable.WhereSelectEnumerableIterator<LogEntry,LogEntry>
De toute évidence, il me manque quelque chose de fondamental à propos de LINQ. Mais quoi?
Cheers.
Ouais, vous avez raison. – jason
Eh bien, ni ne semble fonctionner. Il n'y a pas de méthode "Compile" disponible sur whereClause selon Intellisense, et en changeant le var en AsQueryable() je reçois toujours une erreur similaire - Erreur 'System.Linq.IQueryable' ne contient pas de définition pour 'Où' et la meilleure méthode d'extension surcharge 'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable , System.Func )' a certains arguments non valides. J'ai effectivement essayé le AsQueryable avant de poster comme il semblait la solution évidente. –
@Matt: Désolé, cela aurait dû être 'whereStatement.Compile' - et si vous utilisiez 'whereStatement' dans le corps de la boucle dans le code original mais avec AsQueryable, cela aurait aussi fonctionné. Éditera avec les changements de nom suggérés ... –