2016-06-22 8 views
0

私は、ユーザーテーブルにリンクされた撮影者テーブルを持つMVC 5(EF6)アプリケーションを構築しています。ユーザーロール/テーブルに基づいてテーブルレコードを返します。失敗する - linqクエリに参加します。

私は写真家を特定するために、ユーザーアカウントで役割を設定します。撮影者テーブルは、テーブルではない追加情報を保持する。私は、さまざまな種類のユーザーがシステムにアクセスしています。

撮影者の役割にあるユーザーに基づいて撮影者テーブルレコードを取得する必要があります。次の解決策がありますが、クエリ結果にアクセスしようとすると、次のエラーメッセージが表示されます。

'Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'という型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされています。いくつかの研究と@Shawnヤンからの助けを借りた後

var photogpraherRole = db.Roles.Single(r => r.Name == "photographer"); 
var users = photogpraherRole.Users.ToList(); 

var photographersList = 
    from photographer in db.Photographers 
    join user in users on photographer.User.Id equals user.UserId 
    orderby photographer.Priority 
    select photographer; 

foreach (var photographer in photographersList) 
{ 
    var photographerName = photographer.User.FirstName; 
} 
+1

私はあなたの2行目は、 'VARユーザー= db.Users.Where(M => m.Roles.Name == "写真家")を使用してproblem.Tryである疑いがある)ToListメソッド();' –

+0

感謝@ショーンヤン。これは完全な解決策ではありませんでした。しかし、私は正しい方向に私を指摘した。私は以下の完全なソリューションを掲載しました。 – Andrew

+0

こんにちは。 –

答えて

0

、これは私が思いついたのソリューションです。

var photographerRole = db.Roles.SingleOrDefault(m => m.Name == "photographer"); 
var disabledRole = db.Roles.SingleOrDefault(m => m.Name == "disabled"); 

var users = db.Users.Where(m => m.Roles.All(r => r.RoleId == photographerRole.Id && r.RoleId != disabledRole.Id)).ToList(); 

var photographersList = 
    from photographer in db.Photographers.ToList() 
    join user in users on photographer.User.Id equals user.Id 
    where photographer.Location == booking.location.Location 
    orderby photographer.Priority 
    select photographer; 
var photographers = photographersList.ToList(); 
関連する問題