2011-01-17 9 views
0

私はCompanyViewModelコンストラクタで、次のモデルを移入し、単一のLINQクエリを作成しようとしています:のLINQ:複数記載されている複合型へのキャストの結果

public class CompanyViewModel 
{ 
    public IList<CompanyUserViewModel> CompanyUsers { get; set; } 
    ... 
} 

public class CompanyUserViewModel 
{ 
    public User User { get; set; } 
    public IList<UserOperationViewModel> UsersOperations { get; set; } 
} 

public class UserOperationViewModel 
{ 
    public Operation Operation { get; set; } 
    public int Permission { get; set; } 
} 

現在、私は次のクエリを持っています:ビルドを

return db.Users.Where(u => u.CompanyId == companyId) 
       .Select(u => new CompanyUserViewModel { 
        User = u, 
        UsersOperations = db.UsersInOperations 
         .Where(uo => uo.UserId == uo.UserId) 
         .Select(uo => new UserOperationViewModel{ 
          Operation = uo.Operation, 
          Permission = uo.Permission 
         }).ToList() 
       }).ToList(); 

が、ページを実行すると、私が取得

LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[WoodCo.Models.BusinessObject.UserOperationViewModel] ToList[UserOperationViewModel](System.Collections.Generic.IEnumerable`1[WoodCo.Models.BusinessObject.UserOperationViewModel])' method, and this method cannot be translated into a store expression. 

W帽子は1つをしますか?

答えて

1

IList<Tの代わりにIEnumerable<T>を使用するようにビューモデルのプロパティを変更し、.ToList()呼び出しを削除します。

+0

私は可能性を考えました、それはちょうど私のビュー(私はASP.NET MVC 2を使用しています)私は、インデックスでアイテムにアクセスしています。 Model.CompanyUsers [x] .UsersOperations [y] .Permission既定のモデルバインディングが機能するようにします。 – ajbeaven

+1

クエリを2つに分割することができます。最初に匿名型にプロジェクトを作成し、次に.AsEnumerable()を実行してリストを作成します。 –

関連する問題