2011-02-05 34 views
1

我發現了一些看起來相似的問題,但不完全一樣,所以我會爲它做。結合了2個IQueryable結果

我使用EF檢索2個表。這些表/實體沒有真正的「是」關係。他們恰好有一些常用字段,我想在包含兩個表格之間的組合的前N個條目的列表中公開。每一行都必須有某種方式來識別它是哪種類型以及它指向哪個實例。

我已經解決了這個問題,但我想我想知道是否有更好的方法。我的解決方案是創建一個視圖模型類:

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

可以`EntityA`和`EntityB`沒有使用相同的接口和那麼你返回一個`List `它包含它們兩個?對於我來說,看起來比給匿名類型更多的OOP。 – Bazzz 2011-02-05 11:35:01

+0

我認爲一個界面是要走的路。 – carlsb3rg 2011-02-05 14:41:55

回答

2

看一看這個,也許這是行不通開箱的,但它應該給你一個想法:

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 
}