2016-10-05 3 views
0

私はASPとC#の非常に基本的な知識を持つインターンです。 私はASP.NET MVCで作業しているアプリケーションのプロジェクト>マップ>テーママップのリストを表示しようとしています。私の3番目のforeachでは、私はエラーを得る:"ThemeMaps"の定義を含まず、拡張メソッド "ThemeMaps"がタイプの最初の引数を受け入れることができませんでした "。複数のネストされたリストにデータを設定するASP.NET MVC C#

は私がvmProject.Mapsは、プロパティにThemeMapsが含まれていない理由として困惑しています。地図のようにそのリストをインスタンス化しました。私は間違って何をしていますか?

LayersController.cs

  // Create viewmodel object 
      var viewModel = new AddLayerToThemeMapViewModel(); 

      // Create Project list 
      viewModel.Projects = new List<AddProject>(); 

      // Loop over all maps 
      List<Project> projects = this.applicationDb.Projects.OrderBy(e => e.Title).ToList(); 
      foreach (var project in projects) 
      { 
       // Create map 
       var vmProject = new AddProject() 
       { 
        ProjectId = project.ProjectID, 
        ProjectTitle = project.Title, 
        Maps = new List<AddLayerMap>(), 
       }; 

       foreach (var map in project.Maps.OrderBy(e => e.Title)) 
       { 
        // Create map 
        vmProject.Maps.Add(new AddLayerMap() 
        { 
         MapId = map.MapId, 
         MapTitle = map.Title, 
         ThemeMaps = new List<AddLayerMapThemeMap>(), 
        }); 

        // Loop over all thememaps in map 
        foreach (var thememap in map.ThemeMaps.OrderBy(e => e.Order)) 
        { 
         vmProject.Maps.ThemeMaps.Add(new AddLayerMapThemeMap() 
         { 
          ThemeMapId = thememap.ThemeMapId, 
          ThemeMapTitle = thememap.Title, 
         }); 
        } 
       } 

       // Add map to list 
       viewModel.Projects.Add(vmProject); 
      } 

次のようになり、私は紙の上で開始する前に、私はscetchを作っ

using Mapgear.MapViewer.Entities; 
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace Mapgear.MapViewer.ViewModels 
{ 
    public class AddLayerToThemeMapViewModel 
    { 
     public Guid LayerId { get; set; } 

     public List<AddProject> Projects { get; set; } 
    } 

    public class AddProject 
    { 
     public Guid ProjectId { get; set; } 

     public string ProjectTitle { get; set; } 

     public List<AddLayerMap> Maps { get; set; } 
    } 

    public class AddLayerMap 
    { 
     public Guid MapId { get; set; } 

     public string MapTitle { get; set; } 

     public List<AddLayerMapThemeMap> ThemeMaps { get; set; } 
    } 

    public class AddLayerMapThemeMap 
    { 
     public Guid ThemeMapId { get; set; } 

     public string ThemeMapTitle { get; set; } 
    } 
} 

私のviewmodelクラス、:

  • をLayerIdプロジェクトを一覧表示
    • PROJECTID
    • ProjectTitle
    • 一覧マップ
      • MapId
      • MapTitle
      • 一覧ThemeMap
        • ThemeMapId
        • ThemeMapTitle

私は私のクラスの名前を知っているが、しかし私はそれらを自分で書くdin't、ビットダサく外です。後にそれらを最適化するつもりです。

PS:これは私の最初の質問StackOverflowです!

+0

'' vmProject.Maps''は '' List ''です。 ThemeMapsにアクセスする前に、FirstOrDefault()を呼び出すことができます。 – usercr

答えて

0

2番目のfor-eachループのコードを少し修正しました。新しく作成したマップの変数を追加し、作成したマップにマップマップを追加しました。それが正しいかどうかチェックしてください。

var newMap = new AddLayerMap() 
{ 
    MapId = map.MapId, 
    MapTitle = map.Title, 
    ThemeMaps = new List<AddLayerMapThemeMap>(), 
}; 
// Create map 
vmProject.Maps.Add(newMap); 

// Loop over all thememaps in map 
foreach (var thememap in map.ThemeMaps.OrderBy(e => e.Order)) 
{ 
    newMap.ThemeMaps.Add(new AddLayerMapThemeMap() 
    { 
     ThemeMapId = thememap.ThemeMapId, 
     ThemeMapTitle = thememap.Title, 
    }); 
} 
+0

それはうまくいった、ありがとう!私は自分自身でこの解決法を見ていません。これは私が行ったこととどのように違うのですか?私はそれが同じだと思ったので。 – RobbertS

関連する問題