Je suis en train de filtre d'abord un ensemble de produits, puis de les commanderentités de filtre, puis trier sur le champ dynamique
(repository.GetAllProducts()
.Where(x=>x.Naam.Contains("filter")) as ObjectQuery<Product>)
.FunkyOrder<Product>(sortfield,sortdirection)
En utilisant la méthode d'extension:
public static IEnumerable<T> FunkyOrder<T>(this ObjectQuery<T> input, string fieldname = "Id", string sortdirection = "asc")
{
switch (sortdirection)
{
case "dsc":
case "desc":
return input.OrderBy("it." + fieldname + " DESC");
default:
return input.OrderBy("it." + fieldname);
}
}
(les GetAllProducts() de mon dépôt retourne une méthode IEnumerable
Cette FunkyOrder devrait fonctionner, mais que - comme ObjectQuery - retours cast NULL
Je ne peux utiliser que FunkyOrder avec ObjectQuery, car cela semble être la seule chose qui supporte les requêtes "it.FieldName".
Si je change la - comme - notation à Un casting régulier je reçois:
Unable to cast object of type 'WhereEnumerableIterator`1[MySecretNameSpace.Product]' to type 'System.Data.Objects.ObjectQuery`1[MySecretNameSpace.Product]'.
Est-il possible de faire ce travail ou que je serai obligé de soit vivre avec le tri avant le filtrage ou écrire un interrupteur géant avec des expressions lambda pour mon tri?
J'ai remplacé votre OrderDirection par SortDirection de System.Web.UI.WebControls; On dirait que votre mal de tête en valait la peine, ça fonctionne bien! –
Vraiment impressionnant, merci @Tejs, merci. –