Dynamics CRM 2011 фильтрует данные, возвращаемые из веб-службы - PullRequest
2 голосов
/ 26 июля 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 Ответ

2 голосов
/ 15 ноября 2011

Согласно этой документации: http://technet.microsoft.com/en-us/library/gg328328.aspx

Поставщик запросов LINQ поддерживает подмножество операторов LINQ.Поддерживаются не все условия, которые могут быть выражены в LINQ.

orderBy поддерживает упорядочение по атрибутам сущности, таким как Contact.FullName.

Что вы можете сделатьсначала использовать предложение where, а затем использовать метод ToList ().После этого у вас будет коллекция данных, в которой вы можете использовать все распространенные запросы Linq.

Кроме того, попытка упорядочить ссылку EntityReference не является хорошим способом сделать это.Вы должны попробовать упорядочить так:

OrderBy(x => x.SubCategory.Id)

где: Левая часть предложения должна быть именем атрибута, а правая часть предложения должна быть значением.Вы не можете установить левую сторону на постоянную.Обе стороны пункта не могут быть постоянными.Поддерживает функции String Contains, StartsWith, EndsWith и Equals

. Здесь вы можете фильтровать значения по Id или по имени (это единственная релевантная информация, которую вы можете получить из EntityReference.в данном случае).

Where(x => x.SubCategory.Name == "CategoryNameToExclude");
...