J'ai une méthode qui accepte une date dtSince
et une chaîne component
comme paramètres. J'ai besoin d'écrire une requête Linq d'une ligne qui recherche les entrées qui se sont produites avant dtSince
et est du composant component
(si spécifié). J'ai essayé ce qui suit:Erreur non prise en charge
var result = from items in MyAzureTable
where items.Occured >= dtSince
&& items.Component == (component ?? items.Component)
select items;
Mais j'obtiens une erreur NotSupported. Je suppose que le items.Component == (component ?? items.Component)
est le problème.
Comme mentionné, component
peut être nul ou vide. Mais je ne peux pas exclure que, dans la requête initiale, parce que cela:
var result = from items in MyAzureTable
where items.Occured >= dtSince
select items;
pourrait revenir plus de 1000 lignes (ce qui semble être la limite par défaut des tables Azure) et donc je ne peux pas filtrer le component
plus tard. Si je fais quelque chose comme le ci-dessous, l'entrée que je pourrais chercher est à la ligne 1001. Ainsi, cela ne me donnera pas le résultat que je cherche.
if (!String.IsNullOrEmpty(component))
{
result = result.Where(x => x.Component == component).ToList<>();
}
Question: Est-il possible d'avoir une ligne de requête LINQ qui peut vérifier une chaîne non vide avant de l'utiliser dans une clause where?
Est-azur vraiment pas fournir une API '' IQueryable? Je m'attendrais à ce que 'where'" compose "... –
@Marc, Il semble y avoir une limite de lignes interrogeables dans les tables Azure. Ce type essaie d'interroger 200 millions, et voir ce qui s'est passé. ;) http://stackoverflow.com/questions/5837213/azure-querying-200-million-entities –
@Alex - mais c'est différent; en * composant * une requête que vous devriez filtrer * avant * que la requête ne soit envoyée au serveur, donc la requête finale n'effectuera pas (ou ne devrait pas) exécuter la requête ouverte –