2017-07-18 148 views
0

我想加入下面的四个表,下面的查询,但我不知道如何检索所有的答案和与每个问卷相关的问题,我该怎么做? 使用此查询只能检索一个答案和问题。Linq加入查询4表

感谢

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(); 

编辑

要创建问卷每单排多个答案选项,鸟巢的结果是这样的;

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(); 

(你需要你的Questionarios类有一个列表属性按住接听细节)

然后,您可以窝在你的主stacklayout列表或stacklayout并设置数据源的答案财产。

+0

感谢您试图提供帮助,但给我的输出相同。 – Phill

+0

Phill,数据库如何定义 - 是Entity Framework还是自定义类? – Tintow

+0

我正在使用实体框架。 – Phill