Я полагаю, что ответом на этот вопрос может быть использование Linq to Sql, но я хотел посмотреть, возможно ли это с помощью QueryExpressions: -
Я создаю выражение запроса, которое запрашивает Entity A, оно также связывается с Entity B (через LinkEntity) и накладывает дополнительные критерии. Можно извлечь столбцы из объекта B, добавив соответствующие имена атрибутов. Однако он будет извлекать только связанный объект (внутреннее соединение).
Возможно ли использование QueryExpression для извлечения всех связанных записей (и обязательных столбцов) из сущности B, относящейся к сущности A (например, все случаи, связанные с контактом, когда контакт соответствует заданным критериям). Обычно я хотел бы рассмотреть вопрос об инвертировании запроса и поиске объекта B по отношению к объекту 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
}
Таким образом, это вернет строку для каждой сущности А, для сущности В. Затем, чтобы упростить задачу, я определил пользовательский класс «MyEntityAClass», у которого были свойства, которые были списками, чтобы я мог вернуть один объект для заполнения GridView и т. Д. больше связано с обработкой этих результатов, поэтому я не разместил этот код здесь.
Надеюсь, это имеет смысл. По сути, это получение нескольких строк для каждой записи в виде SQL, что заставляет этот метод работать.