Последовательный (условный) Где пункты в Linq - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь создать оператор 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 и, таким образом, к result добавляется еще один Where, я получаю ошибку followinin при 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 голосов
/ 23 декабря 2011

Похоже, что 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...