3 votes

Exécution de plusieurs IQueryable en un seul point d'exécution

J'ai une méthode qui, lorsqu'on lui passe un paramètre, renvoie un IQueryable. Au total, cette méthode est utilisée pour générer 13 IQueryable distincts.

Le résultat final dont j'ai besoin est d'obtenir 13 comptes différents de mon ensemble d'enregistrements dans les IQueryables, mais pour rendre cela plus efficace que mon implémentation actuelle qui est :

var foo = iQueryableObject.Count();
var bar = iSecondQueryableObject.Count();

J'aimerais exécuter tous les comptes sur le serveur SQL à un seul point d'exécution, donc en théorie quelque chose comme ceci :

var foobar = new IQueryable<object>[]
{
    iQueryableObject.DeferredExecutionCount(),
    iSecondQueryableObject.DeferredExecutionCount()
}.ToList();

Quelqu'un a-t-il une idée de la manière dont je peux y parvenir ?

1voto

iggymoran Points 930

Vous devez essayer ceci avec la base de données réelle, mais vous pouvez utiliser GroupBy y Union (ou Concat ) pour y parvenir.

Considérez les POCOs suivants (vos entités EF) :

class Thing
{
    public string One { get; set;}
}

class Thang
{
    public string Two { get; set;}
}

Maintenant, vos questions :

var foo= Things
    .Where(t => t.One == "One") //or whatever your filtering condition
    .GroupBy(t => t.One)
    .Select(t => new {Key = "FirstQuery", Count = t.Count()});

var bar = Thangs
    .Where(t => t.Two == "Two")
    .GroupBy(t => t.Two)
    .Select(t => new {Key = "SecondQuery", Count = t.Count()});

var deferredCounts = foo.Concat(bar).ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X