将2个不同类型的单独列表合并为1个另一个类型的新列表

时间:2016-03-23 15:17:40

标签: c# list

我从两个独立的API获取json数据,然后将它们放入两个不同类型的列表中。到目前为止一切都很好,如下所示:

foreach (var item in instaObj.items)
{
    var media = model.ImportedMedia.Select(o => new MediaImport
    {
        Id = item.id,
        MediaUrl = item.images.standard_resolution.url,
        CreatedTime = item.created_time
    }).ToList();

    model.ImportedMedia.AddRange(media);

}

foreach (var item in photos)
{
    var media = model.ImportedMedia.Select(o => new MediaImport
    {
        Id = item.PhotoId,
        MediaUrl = item.Medium640Url,
        CreatedTime = item.DateUploaded.ToString(CultureInfo.InvariantCulture)
    }).ToList();

    model.ImportedMedia.AddRange(media);
}

但是我需要将它们放在另一个列表(另一种类型)中,以按日期排序的GUI显示。

以下是我迄今取得的成就。但是当'AddRange''var media'为空时。这里有什么不对。我希望'var media'保存值,现在它们为null。

def addEntry(filename, cp_y, cp_x, sigma, intensity, chip):
    sqlite3.register_adapter(np.ndarray, adapt_array)
    sqlite3.register_converter('ARRAY', convert_array)
    con = sqlite3.connect('sources.db', detect_types = sqlite3.PARSE_DECLTYPES, timeout = 10)
    cur = con.sursor()
    cur.execute('''INSERT INTO sources (filename, cp_y, cp_x, sigma, intensity, chip) VALUES(?, ?, ?, ?, ?, ?), (filename, cp_y, cp_x, sigma, intensity, chip))
    con.commit()
    con.close()

3 个答案:

答案 0 :(得分:4)

为什么要在Select上致电model.ImportedMedia?我想你想做的是:

model.ImportedMedia.AddRange(instaObj.items.Select(item =>
    new MediaImport {
        Id = item.id,
        MediaUrl = item.images.standard_resolution.url,
        CreatedTime = item.created_time
    });

接着是

model.ImportedMedia.AddRange(photos.Select(photo => new MediaImport
    {    
        Id = photo.PhotoId,
        MediaUrl = photo.Medium640Url,
        CreatedTime = photo.DateUploaded.ToString(CultureInfo.InvariantCulture)
});

答案 1 :(得分:3)

您可能希望对您正在迭代的集合进行操作,而不是像这样

var media1 = instaObj.items.Select(o => new MediaImport
{
    Id = o.id,
    MediaUrl = o.images.standard_resolution.url,
    CreatedTime = o.created_time
});

var media2 = photos.Select(o => new MediaImport
{
    Id = o.PhotoId,
    MediaUrl = o.Medium640Url,
    CreatedTime = o.DateUploaded.ToString(CultureInfo.InvariantCulture)
});

var mergedList = media1.Union(media2).ToList();

目前感觉有点像你在搅拌苹果和梨。

答案 2 :(得分:3)

您正在从media本身创建model.ImportedMedia变量,然后添加它。如果model.ImportedMedia最初为空,则不会添加任何元素。

我认为你想要的是:

var media1 = instaObj.items.Select(item => new MediaImport
{
    Id = item.id,
    MediaUrl = item.images.standard_resolution.url,
    CreatedTime = item.created_time
});

var media2 = photos.Select(item => new MediaImport
{
    Id = item.PhotoId,
    MediaUrl = item.Medium640Url,
    CreatedTime = item.DateUploaded.ToString(CultureInfo.InvariantCulture)
});

model.ImportedMedia.AddRange(media1);
model.ImportedMedia.AddRange(media2);