2011-10-11 70 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