0

私は次のようにデータベースをセットアップしています (残念ながら、ここで図の画像を公開することは許可されていませんでしたので、説明する必要があります: 応答テーブル - RespondentID、QuestionID、ResponseOptionID が含まれています。

ResponsesInProperties (多対多テーブル) - ResponseID、ResponsePropertyID を含む

ResponsesInProperties テーブルには多対多の関係があります。もちろん、このテーブルはEFには表示されません。

「Country」と「Wave」の 2 つの応答プロパティ タイプと、対応する ResponeProperties「USA」、「UK」、「Wave2011」、「Wave2012」があるとします。

ここで、データベースから、米国と Wave2012 にあるすべての (重複していない) 応答を取得する必要があります。秘訣は、必要なすべての応答が Wave2012 と USA の両方にある必要があるということです。私はLINQ to SQLでこれを達成しようとしています。以下は、私が思いついたLinqで、正しいレコードを取得しますが、さまざまなプロパティに対して何度も表示されます。プロパティを制限すると、レコードがまったく得られません....

どんな助けでも大歓迎です!

            var responses = from r in db.Responses
                            from rp in r.ResponseProperties
                            select new
                            {
                                RespondentID = r.RespondentID,
                                QuestionCode = r.Question.Code,
                                ResponseOptionCode = r.ResponseOption.Code,
                                ResponseOptionCodeName = r.ResponseOption.Text,
                                ResponsePropertyName = rp.Name,
                                ResponsePropertyTypeName = rp.ResponsePropertyType.Name
                            };
4

2 に答える 2

0

明確にするために、EMのモデルがかなり異なるため、EFではなくLINQtoSQLを使用してこれを実行しようとしています。LINQ to SQLでは、中間結合テーブルを含める必要があります。

この時点でクエリに欠けている重要な点は、filter(Where)句です。結果を適切にフィルタリングするには、結合の両側にそれらを指定する必要があります。フィルタを指定すると、レコードが返されないことを示します。根本的な問題を解決するのに役立つ可能性があるため、そのフィルターを使用して質問を明確にできますか。

于 2012-08-20T19:13:20.637 に答える
0

結果を複製する ResponsePropertyName と ResponsePropertyTypeName も取得するため、クエリは一意の応答を生成できません。

このエンティティ フレームワーク クエリ -

from r in db.Responses
where r.ResponseProperties.Any (rp => rp.Name == "USA")
where r.ResponseProperties.Any (rp => rp.Name == "Wave2012")
select new
{
    RespondentID = r.RespondentID,
    QuestionCode = r.Question.Code,
    ResponseOptionCode = r.ResponseOption.Code,
    ResponseOptionCodeName = r.ResponseOption.Text,
};

Responseは、USA および Wave2012 にある固有の を生成します。生成された sql は、 を含む 2 つのEXISTS述語を示しANDます。

于 2012-08-21T22:55:44.647 に答える