16.06.2016, 12:39 | #1 |
Участник
|
Пакетной получение всех связей 1:N
Коллеги, приветствую.
Есть следующая задача. Имеется сущность контакт. У сущности есть несколько связей 1:М. Требуется максимально оптимальное решение (дотнет) для получения всех связанных объектов (гуидов) на текущий момент по этим связям. Моё решение (три связанных сущности new_sms, new_discountcard, new_order): Код: string fetch = @" <fetch count='50' > <entity name='contact' > <filter type='and' > <condition attribute='contactid' operator='eq' value='" + contactSlaveId + @"' /> </filter> <link-entity name='new_sms' from='new_contactid' to='contactid' link-type='outer' alias='sms' > <attribute name='new_smsid' /> </link-entity> <link-entity name='new_discountcard' from='new_contactid' to='contactid' link-type='outer' alias='card' > <attribute name='new_discountcardid' /> </link-entity> <link-entity name='new_order' from='new_contactid' to='contactid' link-type='outer' alias='order' > <attribute name='new_orderid' /> </link-entity> </entity> </fetch>"; EntityCollection result = Service.RetrieveMultiple(new FetchExpression(fetch)); var smsList = result.Entities.Select(x => x.GetAttributeValue<AliasedValue>("sms.new_smsid").Value).Distinct().ToList(); var cardList = result.Entities.Select(x => x.GetAttributeValue<AliasedValue>("card.new_discountcardid").Value).Distinct().ToList(); var orderList = result.Entities.Select(x => x.GetAttributeValue<AliasedValue>("order.new_orderid").Value).Distinct().ToList(); |
|
16.06.2016, 23:47 | #2 |
Чайный пьяница
|
Если честно, то элегантностью ваше решение уж точно не отличается (извините за критику). Если по вашей выборки у контакта будет по 3 связанных записи, то результат составит 27 строк, что как по мне далеко не является идеалом.
Если вам необходимо получить связанные записи по одному контакту, то можно воспользоваться следующим трюком - https://community.dynamics.com/crm/b...etrieve-method Если этот вариант - не вариант я бы для экономии времени просто разрезал ваши запросы на 3 части (без страшных джоинов) и упаковал бы всё в пакет - https://msdn.microsoft.com/en-us/lib...or=-2147217396
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: magicandy (1). |
17.06.2016, 10:53 | #3 |
Участник
|
Цитата:
Цитата:
Если по вашей выборки у контакта будет по 3 связанных записи, то результат составит 27 строк, что как по мне далеко не является идеалом.
Цитата:
Если вам необходимо получить связанные записи по одному контакту, то можно воспользоваться следующим трюком - https://community.dynamics.com/crm/b...etrieve-method
Я изначально ставил цель получить одним запросом к серверу все результаты, по всем связям. Цитата:
Если этот вариант - не вариант я бы для экономии времени просто разрезал ваши запросы на 3 части (без страшных джоинов) и упаковал бы всё в пакет - https://msdn.microsoft.com/en-us/lib...or=-2147217396
|
|
17.06.2016, 19:27 | #4 |
Чайный пьяница
|
Попробуйте и посмотрите результат именно в такой ситуации как описал я - по несколько связанных по всем связям. По идее гуидов - должно быть по количеству связанных - так оно и будет, только всё будет вперемешку. Декартово произведение называется.
Цитата:
По поводу сравнения быстродействия - ничего не скажу, не сравнивал, вам и карты в руки.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|