Я не уверен, почему по какой-то причине происходит сбой по-разному, может быть, потому что это анонимный тип, и он все еще IQuerable, я бы предложил запустить запрос примерно так:
var q1 = ctx.Set<Type1>().Select(x => new { x.Id, x.Ref.Items }).ToList<object>();
var q2 = ctx.Set<Type2>().Select(x => new { x.Id, x.Ref.Items }).ToList<object>();
q1.Union(q2).ToList();
Обратите внимание, что вв этом случае Distinct проверит на равенство всех свойств, то есть, если 2 объекта имеют одинаковый идентификатор, но разные элементы, оба будут там.
если вас не интересуют разные значения, вы также можете использовать concat
, если вам небезразличны разные значения и первая опция не работает, вы можете использовать группуи реализовать свой собственный, что-то вроде этого
var q1 = ctx.Set<Type1>().Select(x => new { Id = x.Id, Items =x.Ref.Items });
var q2 = ctx.Set<Type2>().Select(x => new { Id = x.Id, Items = x.Ref.Items });
//this will group by id, and select the first object items
var qFinal = q1.concat(q2).GroupBy(e => e.id)
.select(e => new {e.key, e.First().Items})
.ToList();
может быть, вы не хотите First()
, вы можете использовать все, что вы хотите