2010-08-12 44 views
1

我有一个电影表,它有一个称为排名的整数属性。我现在想从包含某个演员的所有电影中检索平均排名。.NET Linq to SQL:select where where子句的平均值

暗淡Q2 =(上接第在dc.Movies凡p.actlist.Contains(actor.name)选择p.ranking)。平均()

此查询不工作 - 重载决策失败,因为没有可访问的“平均”接受这个数量的参数。没有Where-Clause它运行良好。

如何将平均函数和Where子句结合起来?我无法找到MSDN和互联网上的任何有用的例子..

+0

您应该添加更多标签... – 2010-08-12 08:34:58

+0

是actlist的字符串列表或演员列表吗? – 2010-08-12 08:41:41

+0

actlist是我的电影表的文本属性。它包含一个xml风格的电影中所有演员的字符串,如演员1演员2。 Dim q1 =(From p In dc.Movies Where p.actlist.Contains(actor.name)Select p).Count() 返回特定演员所在电影的数量 - 此查询工作正常.. 。 – AKR715 2010-08-12 08:53:30

回答

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

这会导致运行时错误(Sequence不包含元素),而不是编译时错误。 – 2010-08-12 08:45:46

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类型。您的查询结果为tinyintIEnumerable。这对于Average没有超载。

+0

这一个不工作,编译失败,错误'Name'不是'Char'的成员。 :-(Actlist只是一个带有xml格式内容的字符串 – AKR715 2010-08-12 09:02:16

+0

在这种情况下,我的回答不是非常有用:) – 2010-08-12 09:14:41

+0

你有什么想法如何实现我想要的结果吗? – AKR715 2010-08-12 09:14:42

0

我已经通过我自己想通了:

暗淡Q3 =(从在dc.Movies凡a.actlist.Contains(actor.name)选择)。平均(功能(R)r.ranking )

但是如果一个演员不在任何电影中,这个人会抛出一个错误。所以我不得不把它放在try ..cast中。