连续(有条件)Linq中的条款
问题描述:
我试图构建一个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.
错误来自哪里?谢谢
答
看来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);
你可以操纵表达式树,但它会是一个非常复杂的代码和查询并不复杂。 – ivowiblo
我知道我有点晚了。我有几乎相同的问题。它看起来像SharePoint不支持将Linq表达式与AndAlso等结合使用。 – Smokefoot