1

私はランキングと呼ばれる整数属性を持つ映画のテーブルを持っています。特定の俳優を含むすべての映画から平均ランキングを取得したいと思います。

Dim q2 = (From p In dc.Movies Where p.actlist.Contains(actor.name) Select p.ranking).Average()

このクエリは機能しません - アクセス可能な "Average" がこの数の引数を受け入れないため、オーバーロードの解決に失敗しました。Where句がなければ問題なく動作します。

Average 関数と Where 句を組み合わせる方法は? MSDN とインターネットで役立つ例を見つけることができませんでした..

4

3 に答える 3

0

私は自分で考え出しました:

Dim q3 = (from a In dc.Movies Where a.actlist.Contains(actor.name) Select a).Average(Function(r) r.ranking)

ただし、俳優がどの映画にも出演していない場合、これは例外をスローします。だから私はそれをtry..castに入れなければなりませんでした。

于 2010-08-12T10:45:09.043 に答える
0

結果が得られない可能性があるため、平均を出すことはできません。試す

Dim q2 = (From p In dc.Movies Where p.actlist.Contains(actor.name) Select p.ranking).Count() == 0 ? 0 : (From p In dc.Movies Where p.actlist.Contains(actor.name) Select p.ranking).Average();
于 2010-08-12T08:40:11.907 に答える
0

次のコードを試してみてください:

Dim avgRanking = (From m in dc.Movies _
                  Where m.actlist.Contains(actor.Name) _
                  Select m.ranking).Average(Function(a) Convert.ToInt32(a))

そしてこれもうまくいくはずです:

Dim avgRanking = (From m in dc.Movies _
                  Where m.actlist.Contains(actor.Name) _
                  Select CInt(m.ranking)).Average()

問題はの型ですMovie.ranking。クエリの結果は とIEnumerableですtinyint。このためのオーバーロードはありませんAverage

于 2010-08-12T08:53:22.373 に答える