Я считаю, что ответ на этот вопрос может быть использовать Linq для Sql, но хотел, чтобы увидеть, если это то, что можно с помощью QueryExpressions: -CRM 2011: ограничение выражения запроса?
создать выражение запроса, который запрашивает против Entity А, он также ссылки к объекту B (через LinkEntity) и налагает дополнительные критерии. Можно получить столбцы из Entity B, добавив соответствующие имена атрибутов. Тем не менее, он будет получать только связанный объект (внутреннее соединение).
Возможно ли использовать QueryExpression для получения всех связанных записей (и обязательных столбцов) из объекта B, связанного с объектом A (например, все случаи, связанные с контактом, когда контакт передает указанные критерии). Обычно я рассматривал бы инвертирование запроса и поиск Entity B, относящегося к Entity A, с соответствующими условиями LinkEntity, но есть ряд связанных объектов, которые я хотел бы получить для одного и того же запроса контакта.
Так я остался с некоторыми вариантами: -
(1) Выполнить второй запрос (не идеален при переборе по большому количеству результатов от первоначального запроса), (2) Выполните запрос с использованием Linq to CRM на отфильтрованные виды, (3) Совсем другой метод?
Любые мысли будут оценены.
EDIT:
Я закончил с использованием Linq-to-Sql для выполнения этой задачи и код, используемый аналогично тому, что ниже (хотя и с несколько более присоединяется к фактическому запросу!): -
var dataCollection = (from eA in xrmServiceContext.EntityASet
join eB in xrmServiceContext.EntityBSet on new EntityReference(EntityA.EntityLogicalName, eA.Id) equals (EntityReference)eB.EntityBLookupToEntityA
select new
{
Id = eA.Id,
EntityBInterestingAttribute = eB.InterestingAttributeName
}
так что это вернет строку за Entity А на предприятия В. Чтобы сделать вещи проще, чем я определил пользовательский класс «MyEntityAClass», который имел свойства, которые были списки, чтобы я мог вернуться в один объект для заполнения GridView и т. д. Это больше связано с обработкой этих результатов, хотя я не размещал этот код здесь.
Надеюсь, это имеет смысл. По сути, он получает несколько строк на запись a la SQL, что делает этот метод работы.
Я уверен, что его только меня, но я не понимаю, что запрос, который вы пытаетесь сделать? Можете ли вы сделать запрос в SQL? Левые внешние соединения поддерживаются QueryExpression, так что это может быть то, что вам нужно? – BenPatterson1
Привет, Бен, спасибо за ваш комментарий. Я могу выполнить запрос в SQL, используя внутренние соединения, и я получаю ожидаемое количество строк, например. выбор из набора Entity A и объединение с Entity B атрибута поиска.Но с выражением запроса, если я попытаюсь извлечь столбцы из Entity BI, я могу только получить столбцы из одной из N совпадающих записей в Entity B. Таким образом, проблема не связана с привязкой, но возможность получить требуемые атрибуты из связанных записей, если существует более одного из них (один и тот же псевдоним объекта и имя атрибута). –
Если это еще не ясно (я могу понять, если это не так :)) Я отправлю сценарий кода, когда я вернусь на другую машину позже. –