2016-01-27 2 views
0

J'ai une fonction qui ressemble à ceci:requête LINQ to Dynamic Linq

public void GetAvailableResourcesByLocationChart(List<DateTime> dates, List<ChartResourceModel> data) 
{ 
    var totals = (from r in data 
        group new { Dates = r.Dates } by r.Location into g 
        select new 
        { 
         Location = g.Key, 
         Dates = dates.Select(d => new 
         { 
          Date = d, 
          Available = g.SelectMany(x => x.Dates.Where(y => y.Date == d)).Count(x => x.Available) 
         }) 
         .OrderBy(x => x.Date) 
         .ToList() 
        }) 
       .OrderBy(x => x.Location) 
       .ToList(); 
} 

Cet exemple regroupe les données selon l'emplacement. Mais je veux être capable de transmettre une chaîne qui spécifie ce sur quoi elle doit se grouper. Je pensais que DynamicLinq serait la bonne façon d'y parvenir mais j'ai du mal à le reproduire.

J'ai commencé à faire cela, mais je suis coincé se reproduire le SelectMany dans la sélection:

public void GetAvailableResourcesByLocationChart(List<DateTime> dates, List<ChartResourceModel> data, string grouping) 
{ 
    var totals = data.GroupBy(grouping, "it").Select("new (it.Key as Group, it as Dates)").Cast<dynamic>(); 
} 

Toutes les idées sur ce que je dois faire?

Répondre

0

cette

from r in data 
    group new { Dates = r.Dates } by r.Location into g 
    ... 

est le même que celui

data.GroupBy(r => r.Location, b => b.Dates) 

donc si nous avons variable nommée mérou

data.GroupBy(r => { 
     if (grouper == "L") 
     return r.Location 
     else 
     return r.Dates }, b => b.Dates); 

Cela devrait vous mettre sur la bonne voie?