次のような関数があります。
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がこれを行うには正しい方法だと思っていましたが、再現に問題があります。
私はこれを始めることから始めましたが、select内の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>();
}
次に何をする必要があるかについてのアイデアはありますか?
この
from r in data
group new { Dates = r.Dates } by r.Location into g
...
これと同じです
data.GroupBy(r => r.Location, b => b.Dates)
grouperという名前の変数がある場合
data.GroupBy(r => {
if (grouper == "L")
return r.Location
else
return r.Dates }, b => b.Dates);
これで正しい軌道に乗れるでしょうか?