2011-10-11 55 views
1

我試圖構建一個Linq語句,以便從客戶端使用Sharepoint(2010)對象模型。連續(有條件)Linq中的條款

這是有問題的代碼:

var result = news.Where(n => (bool)n["Online"] 
    && ((DateTime)n["StartDate"] <= DateTime.Now && (DateTime)n["StopDate"] >= DateTime.Now)); 

if (currentUser.IsAgUser()) 
    result = result.Where(n => (string)n["Role"] != "AG-ADMIN"); 

var filteredNews = sharepointContext.LoadQuery(result); 

當執行if單方面等其他Where添加到result,我得到的跟隨着錯誤時LoadQuery荷蘭國際集團它。

The query expression 'value(Microsoft.SharePoint.Client.ListItemCollection).Where(n => (Convert(n.get_Item("Online")) AndAlso ((Convert(n.get_Item("StartDate")) <= DateTime.Now) AndAlso (Convert(n.get_Item("StopDate")) >= DateTime.Now)))).Where(n => (Convert(n.get_Item("Role")) != "AG-ADMIN"))' is not supported. 

錯誤來自哪裏?謝謝

回答

0

看來SharePoint似乎不支持幾個wheres。

廉價的解決方案:

var result = currentUser.IsAgUser() 
       ? news.Where(n => (bool)n["Online"] 
&& ((DateTime)n["StartDate"] <= DateTime.Now && (DateTime)n["StopDate"] >= DateTime.Now) && (string)n["Role"] != "AG-ADMIN") 
       : news.Where(n => (bool)n["Online"] 
&& ((DateTime)n["StartDate"] <= DateTime.Now && (DateTime)n["StopDate"] >= DateTime.Now)); 

var filteredNews = sharepointContext.LoadQuery(result); 
+0

你可以操縱表達式樹,但它會是一個非常複雜的代碼和查詢並不複雜。 – ivowiblo

+0

我知道我有點晚了。我有幾乎相同的問題。它看起來像SharePoint不支持將Linq表達式與AndAlso等結合使用。 – Smokefoot