结合2个IQueryable结果

时间:2011-02-05 11:28:15

标签: c# asp.net-mvc linq entity-framework-4 linq-to-entities

我发现一些看似相似的问题,但不完全一样,所以我会去找它。

我正在使用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 个答案:

答案 0 :(得分: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
}