2017-03-02 2 views
0

Actuellement, je crée la collection d'utilisateurs et la liaison à la grille de données en utilisant le code suivant. Ça fonctionne bien.Linq Requête pour obtenir des détails à partir de la table 2 et mettre dans ObservableCollection C#

private ObservableCollection<User> users; 

    using (CarStudioDBEntities dt = new CarStudioDBEntities()) 
    { 
    var catList = (from user in dt.Users 
        select user).ToList(); 
        users = new ObservableCollection<User>(catList); 
        this.Dispatcher.Invoke(() => 
        { 
         lstUsers.ItemsSource = users; 
        }); 
    } 

XAML

<DataGrid x:Name="lstUsers" Background="White" Margin="0" AutoGenerateColumns="False" IsReadOnly="True"> 
    <DataGrid.Columns> 
      <DataGridTemplateColumn Width="80"> 
       <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button Name="viewUserDetailsBtn" Content="View" Click="viewUserDetailsBtn_Click" Background="#FF3F5164" BorderBrush="Black" FontSize="10" Height="24" Padding="0" Margin="0" /> 
         </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTextColumn Header="Username" Width="*" Binding="{Binding Username}"/> 
    <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/> 
    <DataGridTextColumn Header="Role" Width="*" Binding="{Binding Role}"/> 
    <DataGridTextColumn Header="Contact Number" Width="*" Binding="{Binding ContactNo}" /> 
          <DataGridTextColumn Header="Status" Width="*" Binding="{Binding Status}" /> 
         </DataGrid.Columns> 
    </DataGrid> 

Le problème est que je dois créer une autre pièces ObservableCollection; qui contient une référence de clé étrangère à la table de catégories. Maintenant, j'ai besoin d'obtenir le nom de la catégorie qui est dans la catégorie Category via categoryId présent dans les parties, et enfin lier les détails des pièces avec la catégorie Name To Data Grid. Je ne suis pas en mesure d'écrire une requête linq appropriée pour cela et. En bref, j'ai besoin d'ObservableCollection avec des détails de pièces et de catégories ensemble.

+0

Il n'y a pas de point la création d'une collection observable à partir d'une liste statique. Cela ne va pas vous donner des mises à jour de collection sur la requête originale. – Georg

Répondre

1

Si vous recherchez une jointure interne sur des DataTables à l'aide de LINQ.

var result = from dataRows1 in table1.AsEnumerable() 
      join dataRows2 in table2.AsEnumerable() 
      on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("ID") 

      select dtResult.LoadDataRow(new object[] 
      { 
       dataRows1.Field<string>("ID"), 
       dataRows1.Field<string>("name"), 
       dataRows2.Field<int>("<other fields you want>"), 
       }, false); 
result.CopyToDataTable(); 

Après cela, vous pouvez utiliser le nouveau DataTable pour la liaison