2017-07-18 14 views
0

私は下の4つのテーブルに参加しようとしていますが、以下の質問がありますが、私は各アンケートに関連するすべての回答と質問を取得する方法を教えていません。 このクエリでは、1つの回答と質問のみが取得されます。Linq Join query 4 tables

おかげで、私は、クエリの出力を使用したい

var query = from x in db.Questionario 
         join y in db.Question on x.QuestionarioId equals y.QuestionarioId 
         join j in db.Answer on y.QuestionId equals j.QuestionId 
         join w in db.TypeAnswer on y.TypeAnswerId equals w.TypeAnswerId 

        select new QuestionarioAlldetails 
      { 

       TypesAnswer = w.TypesAnswer, 
       Questiontext = y.Questiontext, 
       Answerv=j.Answerv, 
       Name=x.Name, 

      }; 

<ContentPage.BindingContext> 
    <viewModels:InqueritogViewModel/> 
</ContentPage.BindingContext> 

<StackLayout> 
    <Button Command="{Binding GetinqueritoCommand}" Text="Aceder a Questionarios"></Button> 

    <ListView x:Name="InqueritoView" ItemsSource="{Binding Inqueritos}" HasUnevenRows="True" ItemSelected="ListView_OnItemSelected"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <StackLayout> 
         <StackLayout > 
          <Label x:Name="Label1" Text="{Binding Questiontext}"></Label> 
         </StackLayout> 
         <StackLayout Orientation="Horizontal"> 
          <controls:Checkbox></controls:Checkbox> 
          <Label Text="{Binding Answerv}" VerticalTextAlignment="Center"></Label> 
         </StackLayout> 
         <StackLayout Orientation="Horizontal"> 
          <controls:Checkbox></controls:Checkbox> 
          <Label Text="{Binding Answerv}" VerticalTextAlignment="Center"></Label> 
         </StackLayout> 
         <StackLayout Orientation="Horizontal" > 
          <controls:Checkbox></controls:Checkbox> 
          <Label Text="{Binding Answerv}" VerticalTextAlignment="Center"></Label> 
         </StackLayout> 
        </StackLayout> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

</StackLayout> 

Tables data

Output Query

+0

ヒント: 'foreach'ループを使います。 – Rooben

+0

しかし、どのように?それぞれの質問はquestion1、question2などのような新しい変数を作成しなければならず、同じ答えになります。 – Phill

+0

これは、あなたの質問があなたがどこで呼び出しているかと同じスコープにあるかどうかによって決まります。この答えを見てください。[ここ](https://stackoverflow.com/questions/3601301/how-to-extract -results-from-a-linq-query) – Rooben

答えて

0

あなたはこの

ようなクエリの結果を列挙する必要があります
List<QuestionarioAlldetails> query = (from x in db.Questionario 
        join y in db.Question on x.QuestionarioId equals y.QuestionarioId 
        join j in db.Answer on y.QuestionId equals j.QuestionId 
        join w in db.TypeAnswer on y.TypeAnswerId equals w.TypeAnswerId 

       select new QuestionarioAlldetails 
     { 

      TypesAnswer = w.TypesAnswer, 
      Questiontext = y.Questiontext, 
      Answerv=j.Answerv, 
      Name=x.Name, 

     }).ToList(); 

EDIT

複数の解答選択肢とアンケートごとに単一の行を作成するには、巣このような結果何か。

List<Questionarios> query = (from x in db.Questionario 
       select new Questionarios 
     { 
      Name = x.Name, 
      Answers = (from y in db.Question 
        join j in db.Answer on y.QuestionId equals j.QuestionId 
        join w in db.TypeAnswer on y.TypeAnswerId equals w.TypeAnswerId 
        where y.QuestionarioId == x.QuestionarioId 
        select new Answer { 

        TypesAnswer = w.TypesAnswer, 
        Questiontext = y.Questiontext, 
        Answerv=j.Answerv}).ToList() 

       }).ToList(); 

あなたはその後、巣リストまたはstacklayoutメインstacklayout内とは、回答プロパティにデータソースを設定することができます(あなたは答えの詳細を保持するために、リストプロパティを持っているあなたのQuestionariosクラスが必要です)。

+0

お手伝いをしてくれてありがとうが、私に同じ出力を与えている。 – Phill

+0

Phill、dbはどのように定義されていますか?それはEntity Frameworkかカスタムクラスですか? – Tintow

+0

私はEntity Frameworkを使用しています。 – Phill