2017-02-01 3 views
0

私はリストを返す次のクエリ実行している:私はこのように見て同じ形式でviemodelを持ってRoleViewModelのリストで匿名リストを変換するには?私のアクションメソッドで

var list = db.WorkRoles. 
       Join(db.WorkRolesUsersDetails, 
       o => o.WorkRoleId, od => od.WorkRoleId, 
       (o, od) => new 
       { 
        WorkRoleId = o.WorkRoleId, 
        RoleName = o.RoleName, 
        RoleDescription = o.RoleDescription, 
        CompanyId = o.CompanyId, 
        WRUDId = od.WRUDId, 
        UserDetailsId = od.UserDetailsId, 
        FocusStart = od.FocusStart, 
        FocusEnd = od.FocusEnd 
       }).ToList(); 

を:変換するための最良の方法です

public class RoleViewModel 
{ 
    public RoleViewModel(int workRoleId, string roleName, string roleDescription, int companyId, int wRUDId, string userDetailsId, DateTime focusStart, DateTime focusEnd) 
    { 
     WorkRoleId = workRoleId; 
     RoleName = roleName; 
     RoleDescription = roleDescription; 
     CompanyId = companyId; 
     WRUDId = wRUDId; 
     UserDetailsId = userDetailsId; 
     FocusStart = focusStart; 
     FocusEnd = focusEnd; 
    } 
    int WorkRoleId { get; set; } 
    string RoleName { get; set; } 
    string RoleDescription { get; set; } 
    int CompanyId { get; set; } 
    int WRUDId { get; set; } 
    string UserDetailsId { get; set; } 
    DateTime FocusStart { get; set; } 
    DateTime FocusEnd { get; set; } 
} 

何私のviewmodelのリストへの私のクエリの結果?

+0

あなたはそれ最初の場所でのジェネリックリスト作っている理由はありますか?タイプの例外を ':私は(ここでは答えの1で提案されている)、それは私にこの例外を与えることをしようとすると、新しいオブジェクト '=>新しいRoleViewModel(){プロパティの割り当て}' – JaredStroeb

+0

@JaredStroebに直接選択することができるはずですSystem.NotSupportedException」をEntityFramework.SqlServer.dllで発生したが、ユーザーコードで処理されなかった 追加情報:のみパラメータなしのコンストラクタと初期化子はエンティティへのLINQでサポートされています。 –

+0

はい私は、パラメータなしのコンストラクタの問題に遭遇してきたが、それはプロパティの割り当てに続いて、一般的なコンストラクタを受け入れる必要があります。 NotSupportedExceptionに内部例外または詳細情報がありますか? @Michaelの答えも同様に例外をスローしますか? – JaredStroeb

答えて

1

あなたは次のことを試してみることができるよりも、あなたのアクションメソッドは、ビューモデルの種類を意識する必要がない場合。

  1. 初期リストにSelectを使用し、すべての項目にRoleViewModelを組み立ててください。
  2. はあなたのために仕事をするAutoMapperライブラリを使用してください。

    var list = db.WorkRoles. Join(db.WorkRolesUsersDetails, o => o.WorkRoleId, od => od.WorkRoleId, (o, od) => new { WorkRoleId = o.WorkRoleId, RoleName = o.RoleName, RoleDescription = o.RoleDescription, CompanyId = o.CompanyId, WRUDId = od.WRUDId, UserDetailsId = od.UserDetailsId, FocusStart = od.FocusStart, FocusEnd = od.FocusEnd }).ToList() .Select(item => new RoleViewModel( item.WorkRoleId, item.RoleName, item.RoleDescription, item.CompanyId, item.WRUDId, item.UserDetailsId, item.FocusStart, item.FocusEnd));

1
var list = db.WorkRoles. 
      Join(db.WorkRolesUsersDetails, 
      o => o.WorkRoleId, od => od.WorkRoleId, 
      (o, od) => new RoleViewModel(
       o.WorkRoleId, 
       o.RoleName, 
       o.RoleDescription, 
       o.CompanyId, 
       od.WRUDId, 
       od.UserDetailsId, 
       od.FocusStart, 
       od.FocusEnd 
      )).ToList(); 
+1

を(それは別の '.ToList()'彼の例の最後でなければならない場合があります)タイプ「System.NotSupportedException」の例外がEntityFramework.SqlServer.dllで発生したが、ユーザーコードで 追加情報は処理されませんでした:のみパラメータなしのコンストラクタを初期化子はLINQ to Entitiesでサポートされています。 –

+0

ToListの後に 'Select'を使います。 'ToList'呼び出しは、オブジェクトを実体化します – Michael

関連する問題