2016-01-27 4 views
0

У меня есть функция, которая выглядит следующим образом:Преобразование LINQ запрос к динамическому 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(); 
} 

Этот пример группирует данные, основанные на местоположении. Но я хочу иметь возможность передать строку, которая указывает, на что она должна группироваться. Я думал, что DynamicLinq будет правильным путем, но у меня проблемы с воспроизведением.

Я начал делать это, но я застрять воспроизведения SelectMany внутри выберите:

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>(); 
} 

Любые идеи о том, что мне нужно делать дальше?

ответ

0

этого

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

такая же, как это

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

так, если мы переменная с именем окуня

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

Это должно получить Вас на правильном пути?