1

我有一个电影表,它有一个称为排名的整数属性。我现在想从包含某个演员的所有电影中检索平均排名。

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

此查询不起作用 - 重载解析失败,因为没有可访问的“平均”接受此数量的参数。没有 Where 子句它运行良好。

如何将 Average 函数与 Where-clause 结合使用?我在 MSDN 和互联网上找不到任何有用的例子..

4

3 回答 3

0

我自己想通了:

Dim q3 = (来自 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. 您查询的结果是 和IEnumerabletinyint对此没有重载Average

于 2010-08-12T08:53:22.373 回答