このlinqクエリで少し問題が発生しました:
allStats
データで満たされたリスト ( ) があります (allItems
クラスを参照)。リストには、次のように月と週番号で区切られているように、分割する必要があるさまざまな日のいくつかのエントリが含まれています。
MonthNumber: 1,
List<Weeks> Weeks:
WeekNumber: 1,
List<Days> Days:
PunchedInLate: true,
PunchedOutLate: false,
PunchInDate: 2013-1-1 08:20:10,
PunchOutDate: 2013-1-1 15:00:00
PunchedInLate: true,
PunchedOutLate: false,
PunchInDate: 2013-1-2 08:20:10,
PunchOutDate: 2013-1-2 15:00:00
...
PunchedInLate: true,
PunchedOutLate: false,
PunchInDate: 2013-1-5 08:20:10,
PunchOutDate: 2013-1-5 15:00:00
MonthNumber: 1,
List<Weeks> Weeks:
WeekNumber: 2,
List<Days> Days:
PunchedInLate: true,
PunchedOutLate: false,
PunchInDate: 2013-1-10 08:20:10,
PunchOutDate: 2013-1-10 15:00:00
PunchedInLate: true,
PunchedOutLate: false,
PunchInDate: 2013-1-12 08:20:10,
PunchOutDate: 2013-1-12 15:00:00
PasteBin - サンプル プログラムをダウンロードして、マシンから実行できます。
それは本質的に、私が作成しようとしているこの質問の答えへのアドオンです: SO - リストの一部を2つのリストに分割し、それら2つを結合します
編集:申し訳ありませんが、このエラーを生成する最初のキャストではなく、最後に .ToList() メソッドを試したことを忘れていました:
Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.IEnumerable<TestClass.Weeks>>' to 'System.Collections.Generic.List<TestClass.Weeks>'
public class allItems
{
public DateTime PunchInDate { get; set; }
public DateTime PunchOutDate { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public int WeekNumber { get; set; }
public int MonthNumber { get; set; }
public bool PunchedInLate { get; set; }
public bool PunchedOutLate { get; set; }
}
public class Months
{
public int MonthNumber { get; set; }
public List<Weeks> Weeks { get; set; }
}
public class Weeks
{
public int WeekNumber { get; set; }
public List<Days> Days { get; set; }
}
public class Days
{
public bool PunchedInLate { get; set; }
public bool PunchedOutLate { get; set; }
public DateTime PunchInDate { get; set; }
public DateTime PunchOutDate { get; set; }
public DayOfWeek DayOfWeek { get; set; }
}
そしてコード:
List<allItems> allStats = getAllStats(userId);
List<Months> stats = new List<Months>();
var asItems =
from item in allStats
group item by new { month = item.MonthNumber } into Month
select new Months()
{
MonthNumber = Month.Key.month,
Weeks = Month.Select(week =>
from weeks in allStats
group weeks by new { week = weeks.WeekNumber } into Week
select new Weeks()
{
//WeekNumber = week.WeekNumber,
WeekNumber = Week.Key.week, // I just noticed that I guess that I
// need this here, so I can group the
Days = Month.Select(days => // days correctly, right?
new Days()
{
PunchedInLate = days.PunchedInLate,
PunchedOutLate = days.PunchedOutLate,
DayOfWeek = days.DayOfWeek,
PunchInDate = days.PunchInDate,
PunchOutDate = days.PunchOutDate
}).ToList()
}).ToList()
};
List<Months> stat = asItems.ToList();