2010-08-12 111 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中。