.NET Linq to SQL:使用where子句选择平均值

时间:2010-08-12 08:28:02

标签: linq-to-sql average

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

Dim q2 =(from p in dc.Movies where p.actlist.Contains(actor.name)选择p.ranking).Average()

此查询不起作用 - 重载解析失败,因为没有可访问的“Average”接受此数量的参数。没有Where-Clause它运行正常。

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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的重载。

答案 2 :(得分:0)

我自己想通了:

Dim q3 =(来自in dc.Movies,其中a.actlist.Contains(actor.name)选择a).Average(Function(r)r.ranking)

但如果一个演员不在任何一部电影中,那么这个会引发一个例子。所以我不得不把它放在try..cast中。