Question

Je regarde cette Telerik démo , et je suis incapable d'obtenir la mention « compte » au travail. Je crois que la commande suivante est prise en charge uniquement sur EntityFramework, et non Linq2SQL.

return  CurrentDataSource.Products.Where(where).Count();

Le paramètre « où » en minuscule est en fait une chaîne qui est passé dans l'url ADO.Net de DataServices (OData). Cette URL devrait être envoyé au fournisseur Linq pour comprimer davantage la requête.

Si non pris en charge dans Linq2SQL, comment puis-je faire une déclaration similaire?

Était-ce utile?

La solution

Vous devez utiliser une expression lambda pour le prédicat utilisé par la méthode Queryable.Where:

return CurrentDataSource.Products.Where(p => p.Id > 100).Count();

Si vous voulez vraiment utiliser une chaîne alors jetez un oeil à dynamique LINQ, en commençant par le poste de blog de Scott Gu: Dynamic LINQ (Partie 1: Utilisation de la bibliothèque de requêtes LINQ dynamique) . Ensuite, vous devriez être en mesure d'écrire des requêtes similaires à:

return CurrentDataSource.Products.Where("Id > 100").Count();

Autres conseils

Vous pouvez écrire votre propre extension générique, comment vous devriez écrire plus une efficace dépend de la situation ... mais il devrait probablement être quelque chose comme:

public static class IQueryableExtensions 
{
    public static int Count(this IQueryable<T> query)
    {
       return query.ToList().Count;
    }
}

Ceci est probablement pas la façon la plus efficace et ne fonctionne que si vous avez un IQueryable. Si les performances ne sont pas un problème simplement l'utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top