2014-09-22 2 views
0

У меня есть EntityCollection ec в C#, который заполнен всеми учетными записями. Теперь я хочу, чтобы другой список или EntityCollection от ec, у которого есть все учетные записи со статусом активным.MSCRM 2011 EntitCollection и LINQ empty resultset

Я использую Linq для того же.

Но как форма LINQ возвращает пустой результат, а ес имеет 354 количество записей

var activeCRMEC = (from cl in ec.Entities 
       where cl.Attributes["statecode"].ToString()=="0" 
       select cl); 

ИЛИ

var activeCRMEC = ec.Entities.Where(x => x.Attributes["statecode"].ToString() == "0"); 

Каждый раз, когда ResultSet пуст, и я не могу перебирать над ним. И около 300 учетных записей активны, я проверил. То же самое происходит, когда я использую некоторые другие атрибуты, такие как имя и т. Д.

Пожалуйста, будьте любезны, чтобы указать на мою ошибку.

ответ

0

Вы можете создавать ранние классы для записи Запросы Linq.

или Else

Вы можете написать Linq запросов с помощью Late Bound Использование OrganizationServiceContext класса.

Для справки:

OrganizationServiceContext OrgServiceCOntext = new OrganizationServiceContext(service); 

var RetrieveAll = OrgServiceCOntext.CreateQuery("account"). 
       ToList().Where(w => (w.GetAttributeValue<OptionSetValue>("statecode").Value ==0)).Select(s=>s); 
0

Я дам вам несколько советов, а затем расскажу вам, что я догадываюсь о вашей проблеме.

Во-первых, используйте ранние сущности. Если вы никогда не создавали их раньше, используйте earlybound generator, вы сэкономите много головных болей.

Во-вторых, если вы не можете использовать ранние связанные объекты, используйте метод GetAttribute() для класса Entity. Он преобразует типы для вас и обрабатывает нулевые ссылочные проблемы.

Ваши выражения LINQ выглядят правильно, поэтому либо ec.Entities не имеет в нем никаких сущностей, которые соответствуют критериям «statecode», равным 0, или, возможно, у вас есть некоторые отличия в IEnumerables. Попробуйте позвонить ToList() на activeCRMEC сразу после инструкции LINQ, чтобы убедиться, что это не ваша проблема.

0

statecode является OptionSetValue, вы должны бросить его таким образом

((OptionSetValue)cl.Attributes["statecode"]).Value == 0 

или

cl.GetAttributeValue<OptionSetValue>("statecode").Value == 0 

Оба способа являются действительными, и вы должны запросить значение, что она является внутр.

Надеюсь, это может вам помочь.

Смежные вопросы