2017-03-02 5 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를 통해 카테고리 테이블에있는 카테고리 이름을 부품 번호 으로 가져와 Name To Data Grid 카테고리의 세부 정보를 바인딩해야합니다. 이 및에 대한 적절한 linq 쿼리를 작성할 수 없습니다. 짧게 내가 ObservableCollection의 세부 사항 및 카테고리 함께 필요합니다.

+0

바인딩에 대한 새로운 DataTable을 사용할 수 있습니다. 이것은 원래 쿼리에 대한 컬렉션 업데이트를 제공하지 않습니다. – Georg

답변

1

LINQ를 사용하여 DataTables에서 내부 조인을 찾고있는 경우.

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

이 후에는 정적 목록에서 관찰 모음을 만들 아무 소용이 없습니다