2017-03-02 56 views
0

当前我正在使用以下代码创建用户收集和绑定到数据网格。它工作正常。Linq查询从2表中获取详细信息并将其放入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> 

问题是,我需要创建另一个的ObservableCollection份; 其中包含对分类表的外键引用。 现在我需要通过categoryId目录中的CategoryId获取类别名称, ,并最终绑定具有类别Name到Data Grid的部分的详细信息。 我无法为此编写适当的linq查询。 总之,我需要ObservableCollection与部件和类别的细节在一起。

+0

是毫无意义的,从一个静态列表创建一个观察的集合。这不会给你原始查询的集合更新。 – Georg

回答

1

如果您正在使用LINQ查找DataTable上的内连接。

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

在此之后,你可以使用新的DataTable绑定