0

家族内のユーザーのリストがありますvar foo = someUser.MyFamily();
各ユーザーにはクラスのリストがありますpublic virtual List<Class> Classes {get; set;}
各クラスには日付のリストがありますpublic virtual List<Date> Dates {get; set;}

家族向けの今週の予定を表示するために、テーブルを作成したいと思います

    デートクラスの人...
            クラスの人…
    日付+クラスの人々

したがって、私が本当に望んでいるのは、この配置を逆にして
、関連する日付のリスト、
各日付にクラスのリスト、
各クラスにユーザーのリストを含めることです (ただし、家族内のユーザーのみ)。

言い方がわからず困っています。私はそれがこのようになるべきだと考え続けています

var foo = Users x Classes x Dates as in a join
.GroupBy(x => x.Date)
.Select(x => new { something })    
.GroupBy(x => x.Class)
.Select(x => new { something })    
etc...

そして最終的に言えるようになる

foreach (var d in foo)
{
    use d.Date
    foreach (var c in d.Classes)
    {
        use c.Class.ClassTime, c.Class.ClassName
        foreach (var u in c.Users)
        {
            use u.FirstName

洞察をありがとう。

4

1 に答える 1

1

わかった !!!!!

この記事のおかげで、SelectMany を使用して階層をフラット化する方法を学びまし

フラット化したらGroupBy()、オブジェクト階層を Dates -> Meetings -> Users から再構築するのは簡単でした。
各日付にはミーティングのリストがあり
、各ミーティングにはユーザーのリストがあります。

var meetingDates = Model.User.MyFamily(true)
    .SelectMany(x => x.ClassesIamIn)
    .SelectMany(x => x.Class.ClassMeetings, (c, d) => new { Date = d.Date, Meeting = d, c.User })
    .GroupBy(x => x.Date)
    .Select(x => new
    {
        Date = x.Key,
        Meetings = x.Select(y => new { Meeting = y.Meeting, User = y.User })
            .GroupBy(a => a.Meeting)
            .Select(a => new
            {
                Meeting = a.Key,
                Users = a.Select(b => b.User)
                    .OrderBy(d => d.FirstName)
            })
            .OrderBy(c => c.Meeting.TimeStart.TimeOfDay)
    });

うわー、これは苦労しました。うわーなんて安心。上の記事がポイントでした。SelectMany() を使用してリスト内をドリルする方法を知っていました。私が知らなかったのは、親オブジェクトを含むものを作成するためのばかげたラムダ構文でした。(parent, child) => new { parent child mix }

于 2013-04-10T03:36:44.213 に答える