2009-07-24 18 views
0

以前はSQLクエリで関連データを取得したいと思ったときにテーブルを結合しましたが、現在はエンティティにlinqを使っていますが、別のテーブルを使ってテーブルに関連するテーブルからデータを取得します。私はエンティティへのlinqでこの種のクエリを実行する方法を知らない。もし誰かがそれが助かることができればよい。エンティティへのエンティティフレームワークのlinq

この例は、表の役割に関連する表ユーザーとの関係を持つpersonという名前の表です。私は特定の役割を果たす人を得ることができるようにしたい。人はユーザーにのみ関連しており、間接的にはユーザーが役割に関係しているため、私はそのクエリについてはわかりません。また、ナビゲーションプロパティを使用しても、そこに私のすべてを得ることはありません。

すべての情報は良好でしょう。ここでは、データベースの構造の一例である:

db structure http://img194.imageshack.us/img194/4540/persons.jpg

答えて

2

あなたはVSで発電機を使用している場合(つまり、データテーブルやダイアグラムをドロップDRAPとキーはすべてデシベルに設定されている)、あなたが求めている、その後の事すでに自動的にそこに存在する可能性があります。

from Person in Context.Persons 
where Person.Name == "PETER PAN" 
select Person.User.Role.RoleName; 

正確な名前はコードジェネレータを参照する必要がありますが、これがアイデアです。エンティティへのLinqは、外部キーとそれに対するマッピングを支援します。

編集

実際には、私はincludeを使用しようとしていません。しかし、msdn:include methodによれば、インクルードはオブジェクト階層が機能するように表示する必要があります。したがって、クエリを実行するには、

from c in db.Persons.Include("aspnet_Users").Include("aspnet_Roles") 
    where c.aspnet_Users.aspnet_Roles.RoleName == "Role" select c 

さらに、ロールからの開始を検討しますか?

from r in db.aspnet_Roles 
where r.RoleName == "ROLE" 
select r.aspnet_Users.Persons 
+0

私が探していたのは、特定の役割のすべてのユーザーが各自の役割ではないということでした。これを行う際の問題は、何らかの理由でaspnet_Users.aspnet_Roles.RoleNameが利用できないということでした... – user125140

+0

特定のグループに属するすべてのユーザーをマッピングすることを意味します。それがなぜ機能していないのかを見るためにここに投稿できますか? – xandy

+0

return(db.Persons.Include( "aspnet_Users")のcから)c.aspnet_Users.aspnet_Roles.RoleName == "Role" select c); RoleNameは存在するようには見えません...(ロールは単にプレースホルダです。私はクエリの際に実際の役割を使用します) – user125140

1
(from u in db.aspnet_Users.Include("Person") 
from c in db.aspnet_Roles 
where c.RoleName == "role" 
select u.Persons); 

しかししようとするためのおかげで、それを働きました。

+0

SQLの書き込み後にこのようなことを書くのは少し不自然です... – user125140

+1

return db.aspnet_Rolesのcからdb.Personsを取得します。c。RoleName == ""選択u);より良いバージョン – user125140

+0

私はしばらくの間Linq 2 Sqlを使用していましたが、私にとっては(パフォーマンスについて考える必要がある場合を除いて)それは非常に自然です。唯一の主要な違いは、Linqを使用するとsqlの方法で考えないようにしてください、あなたの質問は非常に珍しいと私はLinq 2 Sqlで私は決してそのような状況に遭遇すると確信しています(そして、 – xandy

関連する問題