2017-01-18 6 views
0

私がしていることは、PackageModelにはAccountという項目がありません。そこでViewModelPackageViewModel)を作成しましたので、Accountアイテムを追加できます。列挙型エラー - 定数を作成できませんC#

次のエラーが発生しています。誰か私はそれを並べ替える手伝いできますか

追加情報: 'MyPROJ.Models.Account'の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型 のみがサポートされています。

モデルは、次のされています

public class PackageViewModel 
{ 
    public int ID { get; set; } 
    public Account acc {get; set;} 
} 
私のコントローラから

私は、次のやっている:次のように

public class PackageModel 
{ 
    public int ID { get; set; } 
} 

のViewModelがある

Account a = new db.Account.Find(currentLoggedInUser); 
var xxx = db.PackageModel.Where(y => y.ID== 1) 
      .Select(x => new PackageViewModel() 
      { 
       ID= x.ID, 
       acc = a 
      }); 

return (xxx.ToList()); 

VIEWを

<div class="myall"> 
    @Html.Partial("_SomePage", @Model.First().Account)  
    ... 
</div> 
+2

'PackageViewModel'に' Account'というプロパティがないので、それは '@ Model.First()。acc'でなければなりませんか?このため、モデルの型を宣言する必要があります。 – juharr

+0

@ Html.Partial( "_ SomePage"、Model.First()。acc)の部分ビューにカスタムデータを渡すときは、@マークは不要です。 – Thangadurai

答えて

2

重要ではないタイプのLinq-Entitiesクエリでクロージャーキャプチャされた変数を使用することはできません。 SelectがLINQのツーオブジェクトLINQのツーエンティティクエリの後に起こるように

Account a = db.Account.Find(currentLoggedInUser); 
var xxx = db.PackageModel.Where(y => y.ID== 1) 
     .Select(x => new PackageViewModel() 
     { 
      ID= x.ID, 
      acc = a // <-- you're capturing `a` which is an `Account`, a class type, not a trivial value or object 
     }); 

変更はToListまたはAsEnumerableのいずれかを使用することによって、完了しました:

Account a = db.Account.Find(currentLoggedInUser); 
var xxx = db.PackageModel 
     .Where(p => p.ID == 1) // <-- this part is Linq-to-Entities 
     .AsEnumerable() // <-- this causes the rest of the Linq construct to be evaluated in Linq-to-Objects 
     .Select(p => new PackageViewModel() // <-- this part is Linq-to-Objects 
     { 
      ID = x.ID, 
      acc = a // <-- now you can capture non-trivial values 
     }); 
を...しかし、私はあなたが Whereを使用しているに気づくが、単一の要素( IDが一意であると仮定)を返します述語で、あなたの代わりに SingleOrDefaultを使用する必要があります。

Account acc = db.Account.Find(currentLoggedInUser); 
Package package = db.PackageModel.SingleOrDefault(p => p.ID == 1); 
if(package == null) throw new InvalidOperationException("Package not found"); 

PackageViewModel vm = new PackageViewModel() { ID = package.ID, Acc = acc }; 
return this.View(vm); 
関連する問題