Фильтруйте EntityCollection на основе одного атрибута, используя LINQ: - PullRequest
0 голосов
/ 03 января 2019

У меня есть коллекция сущностей, составленная из запроса fetchXML.

string fetch = @"
  <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
     <entity name='new_rl'>
        <attribute name='new_rlsid' />
        <attribute name='new_productid' />
        <attribute name='new_subquantity' />
        <filter type='and'>
           <condition attribute='new_sg' operator='eq' value='" + servingGroup.Value.ToString() + @"' />
           <condition attribute='new_s' operator='eq' value='' />
           <condition attribute='new_ld' operator='eq' value='" + location + @"' />
           <condition attribute='new_productid' operator='not-null' />
        </filter>
        <link-entity name='new_ys' from='new_ysid' to='new_orderid' link-type='inner' alias='ae'>
        <filter type='and'>
           <condition attribute='new_ysid' operator='eq' value='{" + yGuid.ToString() + @"}' />
        </filter>
      </link-entity>
    </entity>
  </fetch>";


EntityCollection Labels = service.RetrieveMultiple(new FetchExpression(fetch));

Мне нужно отфильтровать вышеуказанную коллекцию сущностей на основе атрибута 'new_productid'.Если две сущности имеют одинаковое значение для 'new_productid', то я хочу, чтобы только одна из этих сущностей отображалась в новой отфильтрованной совокупности сущностей .Мне нужно, чтобы new_productid и new_subquantity и new_rlsid были в моей новой коллекции сущностей.

Я заметил, что у LINQ есть свойство .Distinct(), но все примеры msdn для CRM показывают, как это сделать с LINQ с использованием раннего связывания.Все мои плагины имеют позднюю привязку и нуждаются в решении Linq для поздней привязки.

1 Ответ

0 голосов
/ 03 января 2019

В этом примере показана поздняя привязка с LINQ:

using (var context = new OrganizationServiceContext(service))
{
    var result = (from a in context.CreateQuery("account")
                    join o in context.CreateQuery("opportunity")
                    on a.GetAttributeValue<Guid>("accountid") equals o.GetAttributeValue<Guid>("new_officeid")
                    where a.GetAttributeValue<OptionSetValue>("statecode").Value == 0
                    where o.GetAttributeValue<Guid>("parentaccountid") != Guid.Empty
                    orderby a.GetAttributeValue<string>("name")
                    select new KeyValuePair<Guid, string>(a.GetAttributeValue<Guid>("accountid"), a.GetAttributeValue<string>("name")))
                    .Distinct();
}
...