Dynamics CRM 2011 фильтрует данные, возвращаемые из веб-службы
Я пытаюсь отфильтровать данные по EntityReference без удачи. Без предложения where он работает нормально с предложением where, я получаю следующую ошибку:
Сервер не дал значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера.
Вот мой метод, который вызывает CRMService:
/// <summary>
/// Gets the categories.
/// </summary>
/// <returns></returns>
public IEnumerable<category> GetCategoriesExcludingSomething()
{
IEnumerable<category> data = CrmClient.categorySet.OrderBy(x => x.SubCategory).ThenBy(x => x.itf_name);
return data.Where(x => x.SubCategory.ToString() == "SomethingToExclude");
}
Я попытался использовать SubCategory.Name также, но он дает ту же ошибку. Я думаю, что это связано с тем, что используется раннее связывание или что-то в этом роде, но я не смог получить никакой полезной информации при отладке.
Любой совет или помощь будут великолепны, это должно быть легко:/
1 ответ
Согласно этой документации: http://technet.microsoft.com/en-us/library/gg328328.aspx
Поставщик запросов LINQ поддерживает подмножество операторов LINQ. Не все условия, которые могут быть выражены в LINQ, поддерживаются.
orderBy поддерживает упорядочение по атрибутам сущностей, таким как Contact.FullName.
То, что вы могли бы сделать, это сначала использовать предложение where, а затем использовать метод ToList(). После этого у вас будет коллекция данных, в которой вы сможете использовать все распространенные запросы Linq.
Кроме того, попытка OrderBy EntityReference не является хорошим способом сделать это. Вы должны попробовать сделать заказ так:
OrderBy(x => x.SubCategory.Id)
где: левая часть предложения должна быть именем атрибута, а правая часть предложения должна быть значением. Вы не можете установить левую сторону на постоянную. Обе стороны пункта не могут быть постоянными. Поддерживает функции String Contains, StartsWith, EndsWith и Equals
Здесь вы можете фильтровать значения по Id или по имени (в данном случае это единственная релевантная информация, которую вы получите из EntityReference).
Where(x => x.SubCategory.Name == "CategoryNameToExclude");