在C#中连接两个不同的IEnumerable对象

时间:2015-07-02 05:31:22

标签: c# linq ienumerable

我有两个不同的IEnumerable对象,但两个类中的属性几乎相似,现在我想连接/合并它们,因此两个结果都可以分配给转发器数据源,下面是示例代码。

IEnumerable<ICachedItem> cacheOld = Cache<String>.CachedItems; //My Old Cache Class, here I am fetching all the cached Items
IEnumerable<Caching.ICachedItem> cacheNew = Caching.Cache<String>.CachedItems; //My New class to get the cached items   
var combined = cacheNew.Cast<ICachedItem>().Concat(cacheOld); //Trying to concat both
repeater.DataSource = combined.OrderBy(entry => entry.Region + ":" + entry.Prefix + ":" + entry.Key); //Assigning to Datasource
repeater.DataBind();

合并对象空白,任何建议。

更新: 目前我们在课堂上有这些

public class CachedItem<T>: ICachedItem
{

    public CachedItem(String key, String prefix, T value)
        : this(CacheRegion.Site, prefix, key, value)
    {
    }    
}

我们需要修改这个类吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Select将新项目转换为旧项目。假设你有适当的构造函数,你可以这样做:

var combined = cacheNew.Select(newItem => new OldCachedItem(newItem)).Concat(cacheOld);

结果将是IEnumerable<ICachedItem>类型。您应该将OldCachedItem替换为实现ICachedItem的旧缓存项类型的名称。