Объединение 2 IQueryable результатов - PullRequest
1 голос
/ 05 февраля 2011

Я нашел несколько вопросов, которые выглядели одинаково, но не совсем так, поэтому я пойду на это.

Я использую EF для получения 2 таблиц.Эти таблицы / сущности не имеют реальных отношений "есть".У них просто есть пара общих полей, которые я хочу раскрыть в списке, содержащем первые N записей комбинации между двумя таблицами.У каждой строки должен быть какой-то способ определить, к какому типу она относится и на какой экземпляр она указывает.

Я решил проблему, но, думаю, мне было интересно, есть ли лучший способ.Моим решением было создать класс ViewModel:

intenal class EntityAEntityBCombination
{
    public int? EntityAID { get; set; }
    public int? EntityBID { get; set; }
    public string CommonProperty { get; set; }
}

Затем я сделал это:

var results = (
    from a in EntityAList select new EntityAEntityBCombination
        { EntityAID = a.Id, EntityBID = null, CommonProperty = a.CommonProperty }
    ).Concat(
    from b in EntityBList select new EntityAEntityBCombination
        { EntityAID = null, EntitiyBID = b.Id, CommonProperty = b.CommonProperty }
    ).Fetch(N)

Это работает, но кажется грязным.Есть предложения?

1 Ответ

2 голосов
/ 05 февраля 2011

Посмотрите на это, возможно, оно не работает прямо из коробки, но оно должно дать вам представление:

public class EntityA : IEntity
{}

public class EntityB : IEntity
{}

List<IEntity> results = 
(from a in EntityAList select a).Cast<IEntity>()
.Concat(
(from b in EntityBList select b).Cast<IEntity>()
)
.Fetch(N).ToList();

foreach (IEntity entity in results)
{
 if (entity is EntityA)
  // do something with entity A

 if (entity is EntityB)
  // do something with entity B
}
...