我有一个带电影的表,它有一个名为ranking的整数属性。我现在想从包含某个演员的所有电影中检索平均排名。
Dim q2 =(from p in dc.Movies where p.actlist.Contains(actor.name)选择p.ranking).Average()
此查询不起作用 - 重载解析失败,因为没有可访问的“Average”接受此数量的参数。没有Where-Clause它运行正常。
如何将Average函数与Where子句结合使用?我在MSDN和互联网上找不到任何有用的例子..
答案 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中。