2011-07-21 53 views
0
IQueryable<double?> query = (from t in ctx.MyList orderby t.MyNums select t.MyNums).Take(1); 
IQueryable<double> q2 = query.Cast<double>(); 
IEnumerator<double> enumerator = q2.GetEnumerator(); 

while (enumerator.MoveNext()) 
{ 
    double d = enumerator.Current; 
    return System.Convert.ToInt32(d); 
} 

上述代碼的上下文是我試圖從SharePoint列表列中獲取最大整數值。 SharePoint似乎將所有列表項值視爲「Number」,所以這就是我最初擁有「double」的原因。而不是「int?」。我怎麼能更好地寫這個查詢?此外,目前它根本不起作用......它說「在上次導航後只能指定查詢選項(orderby,where,take,skip)」。那是什麼意思?謝謝..LINQ to SQL簡單查詢以獲得單個int值

其他信息例如「爲什麼Max()在SharePoint Web Services中不起作用」

轉至以下鏈接:http://msdn.microsoft.com/en-us/library/dd673933.aspx。該說明載有說以下內容:

集合在LINQ語法表示的查詢比在具象狀態傳輸(REST)使那些更廣泛的基於所使用的數據服務URI語法。如果查詢無法映射到目標數據服務中的URI,則會引發NotSupportedException。

回答

2

不要忘了檢查空值的情況下,列表中的所有項目都是空

return (int)(ctx.MyList.Max(x => x.MyNums) ?? 0); 
+0

非常感謝。我現在很尷尬,我沒有注意到這種方法。 – KyleM

4

你試過用Max代替嗎?

double max = ctx.MyList.Max(t => t.MyNums); 
return (int) max; 
+0

「不能隱式轉換類型雙翻番......?」 ..編輯:添加在ctx.MyList完成之前將顯式轉換爲(double)。謝謝。 – KyleM