Linq to sql .NET Linq to SQL:选择带where子句的平均值

Linq to sql .NET Linq to SQL:选择带where子句的平均值,linq-to-sql,average,Linq To Sql,Average,我有一个关于电影的表格,它有一个叫做排名的整数属性。我现在想检索包含某个演员的所有电影的平均排名 Dim q2=(来自dc.Movies中的p,其中p.actlist.Contains(actor.name)选择p.ranking.Average() 此查询不起作用-重载解析失败,因为没有可访问的“Average”接受此数量的参数。如果没有Where条款,它运行正常 如何将平均函数与Where子句相结合?我在MSDN和互联网上找不到任何有用的例子 可能没有结果,因此不能给出平均值;试一试 Dim

我有一个关于电影的表格,它有一个叫做排名的整数属性。我现在想检索包含某个演员的所有电影的平均排名

Dim q2=(来自dc.Movies中的p,其中p.actlist.Contains(actor.name)选择p.ranking.Average()

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


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

可能没有结果,因此不能给出平均值;试一试

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();

您可以尝试以下代码:

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()

问题是
电影的类型。排名
。查询的结果是
tinyint
的和
IEnumerable
。这方面没有过载。

我自己想:

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


但是如果一个演员没有出现在任何电影中,这个会抛出一个选项。所以我不得不把它放在try..cast中。

actlist是字符串列表还是演员列表?actlist是我的movies表的文本属性。它包含电影中所有演员的xml样式字符串,如Actor 1Actor 2。Dim q1=(来自dc.Movies中的p,其中p.actlist.Contains(actor.name)选择p)。Count()返回某个actor所在的电影数量-此查询工作正常…这将导致运行时错误(序列不包含元素),而不是编译时错误。此错误不工作,生成失败,错误为“name”不是“Char”的成员-(Actlist只是一个包含xml格式内容的字符串。在这种情况下,我的答案不是很有用:)你知道如何获得我想要的结果吗?电影类型。排名是tinyint。具有可枚举的查询。具有“重载解析失败,因为在没有缩小转换的情况下无法调用可访问的“Average…”的平均中断