2016-03-23 17 views
1

2つの別々のAPIからjson-dataを取得してから別々のタイプの2つのリストに入れます。これまでのところ、すべては以下のような、良いです:異なるタイプの別々の2つのリストを別のタイプの1つの新しいリストにマージする

// Instagram 
var instaService = new InstagramService(); 
var instaObj = await instaService.GetInstagramObject("my company", searchOpt.MinMaxId); 

// Flickr 
var options = new PhotoSearchOptions { PerPage = 20, Page = 1, UserId = "*************" }; 
PhotoCollection photos = FlickrManager.GetInstance().PhotosSearch(options); 

しかし、私は、日付順GUIで示したことが、(別のタイプの)別のリストにそれらを一緒に配置する必要があります。

これまでに私が達成したことは以下のとおりです。しかし、 'AddRange' 'var media'が空の場合。ここで何が問題なの?私は 'var media'に値を保持して、今はnullであることを望みます。

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); 
} 
+2

はあなたがmodel.ImportedMedia.Select 'のようにそのコードを必要と確信しているあなたのロジックとの奇妙なものがある....'、あなただけの必要なように見えます'var media = new MediaImport(){Id = item.Id、..};'と 'model.importMedia.Add(media)'; – teran

+0

forループの各繰り返しで、ImportedMediaを取得し、処理中の現在の項目のデータだけを含む 'ImportedMedia.Length'項目だけを含むリストに「変換」します。私はあなたが本当に間違って何かをやっていると思います。あなたはあなたの 'Select'から' o'変数を使用していません。 – Nyerguds

+1

最初に "model.ImportedMedia"が空の場合(メソッドの開始時に)、 "Select"で何も選択されません。 既に "instaObj.items"を繰り返しているので、既存のコードで行うことができるのは、新しいMediaImportオブジェクトを作成し、それを "model.ImportedMedia"に追加することです。 –

答えて

3

続い

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

:私は何がやりたいことはこれだと思います。 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); 
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(); 

のように反復されている、あなたのコレクションを操作します。

4

model.ImportedMediaにはなぜSelectを呼び出していますか?あなたはそれを追加し、その後、model.ImportedMedia自体からmedia変数を作成している

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