Dans mon nouveau projet, j'écris énormément de linq. J'ai beaucoup de requêtes LINQ comme ceci:Simplifier et concevoir des requêtes linq
...
group new {A, B} by new {....}
into g
// Calculate select claw
let SumVal1 = g.Sum(x => x.A.Value1 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
let SumVal2 = g.Sum(x => x.A.Value2 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
let SumVal3 = g.Sum(x => x.A.Value3 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
....
// Here could be some calculation, that are not patterned, like:
let NotPatternedSum1 = g.Sum(x => x.A.Duration)
...
select new {SumVal1, SumVal2, SumVal3, ..., NotPatternedSum, ...}
Comment puis-je simplifier? J'ai beaucoup de requêtes avec ce modèle (Sum (A * func)/Sum (func)) - comment puis-je introduire cela à une seule méthode ou un délégué?
Peut-être avez-vous déjà vu des conseils pour concevoir de grandes requêtes linq? Mon code est composé de 95% linq (je déplace la logique db vers un client). Pls, me donner quelques conseils, peut-être non trivial =)
Et je veux éviter d'utiliser des types non anonymes
Thnx, assez simple - mais j'ai un problème avec la mise en œuvre donnée. Ma valeur g est IEnumerable (ou IGrouping ?) Et ma fonction ne peut pas accepter les types anonymes comme arguments –
Archeg
@Archeg: J'ai modifié la réponse pour ajouter un exemple supplémentaire en bas. –
Wow, thnx. Quant à moi - très cool, j'ai été très surpris quand VS a montré la liste des membres xA, xB dans le dernier lambda =) Thnx beaucoup – Archeg