1

まだ解決策を見つけることができていない問題があります。問題を単純化するには、2 つの SQL テーブルがあり、LinQ to SQL を使用しています。2 つのテーブルはコースを表し、CourseType には CourseName と TotalSpots が含まれ、CourseInstance には CourseDate、AmountSignedUp、および CourseType への参照が含まれます。CourseType と CourseInstance の間には 1 対多の関係があります。

今、私が助けを必要としているのは、CourseType と CourseInstance の両方を並べ替えるための Linq クエリ/Lambda 式です (可能な場合)。CourseType を合計空きスポット数 (CourseType の下のすべての CourseInstance から計算されます。CourseType.TotalSpots - CourseInstance.SignedUp) の後に並べ替える必要があります。ここでは、空きスポットが最も多い CourseType が最初に表示されます。CourseInstance にある空きスポットの数 (CourseType.TotalSpots - CourseInstance.AmountSignedUp) によって、CourseInstance を同様に並べ替えたいと思います。

これを解決する方法が頭に浮かびません。私は同様の質問と問題を見てきましたが、これは私がこれまでに作成したものであり、基本的なアイデアを提供するためのものです:

編集:これまでのところ、CourseType を正しく並べ替えるこのコードを実行しました。CourseInstance サブリストをソートする方法がわかりません (CourseType.CourseInstance)。誰かがこれに対する良い解決策を持っていない限り、リストに変換するときにコードの後半でそれを行う必要があると思います。アリオンが提案したように、私はそれを行うことができました.なぜ私は彼の答えをマークします.

var result= (
        from c in _db.CourseType
        orderby ((c.TotalSpots * c.CourseInstance.Count) - c.CourseInstance.Sum(
                                ci => (ci.AmountSignUp ?? 0))) descending
        select c
     );
4

1 に答える 1

0

I am not really sure what you want. But kinda sounds like you want to order by the c.TotalSpots - ci.AmountSignedUp. So is not this enough?

var result=(
    from ct in db.CourseType
    join ci in db.CourseInstance
        on ct.SomeCourseTypeKey equals ci.SomeCourseInstanceKey
    orderby c.TotalSpots - ci.AmountSignedUp
    select new {ci,ct}
    );

where db is the linq data context.

Or if c.TotalSpots and ci.AmountSignedUp is nullable then like this:

var result=(
        from ct in db.CourseType
        join ci in db.CourseInstance
            on ct.SomeCourseTypeKey equals ci.SomeCourseInstanceKey
        orderby (c.TotalSpots??0) - (ci.AmountSignedUp??0)
        select new {ci,ct}
        );

I am still not sure want you want but. You could do this:

var result=(
    from ct in db.CourseType
    orderby ct.TotalSpots
    select new 
    {
        ci,
        CourseInstances=(
            from ci in db.CourseInstance
            where ct.SomeCourseTypeKey == ci.SomeCourseInstanceKey
            orderby ct.TotalSpots- ci.AmountSignedUp
            select ci
        )
    }
    );
于 2012-04-23T06:48:31.470 に答える