连续(有条件)Linq中的条款

时间:2011-10-11 15:11:18

标签: linq sharepoint

我正在尝试构建一个Linq语句,以便在具有Sharepoint(2010)对象模型的客户端中使用。

这是一段有问题的代码:

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 parte并将另一个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.

错误来自何处?感谢

1 个答案:

答案 0 :(得分:0)

似乎SharePoint并不支持几种情况。

廉价解决方案:

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);