Linq查询C#中的多个连接表

时间:2011-02-16 23:14:50

标签: c# linq

在我的应用程序中,我必须编写一个显示来自多个表的数据的查询。换句话说,我必须创建一个查询,该查询将为多个表进行连接,并将显示来自此查询的所需信息。 查询必须显示特定(选定)工作人员的所有事件(以及DataGrid中事件的所有数据)。

这是我的LINQ的代码:

IList dataList = (from dWorker in App.glidusContext.tbl_workers
      where dWorker.workerTZ == strSplit
      join d2 in App.glidusContext.tbl_workers_has_tbl_events
      on dWorker.workerID equals d2.workerID
      join dEvent in App.glidusContext.tbl_events
      on d2.eventID equals dEvent.eventID
      join dAct in App.glidusContext.tbl_activities
      on d2.eventID equals dAct.eventID
      select new { d2.damagedVacantionEnd, dEvent, dAct }).ToList();

return dataList;

strSplit是特定(选择)的工作人员。

DataGrid的XAML代码:

<DataGrid.Columns>
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_Event_type}"
      Width="130"
      IsReadOnly="True"
      Binding="{Binding Path=dEvent.tbl_eventsType.eventTypeName}" />
     <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_Classification}"
       Width="130"
       Binding="{Binding Path=dEvent.tbl_eventsClassification.eventClassificationName}" />
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_Catagory}"
      Width="130"
      Binding="{Binding Path=dEvent.tbl_eventsCategories.eventCategoryName}" />
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_Evacuation}"
      Width="130"
      Binding="{Binding Path=d2.damagedEvacuationDescription}" />
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_EvacuationStart}"
      Width="130"
      Binding="{Binding Path=d2.damagedVacantionStart}" />
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_EvacuationEnd}"
      Width="130"
      Binding="{Binding Path=d2.damagedVacantionEnd}" />
 <DataGridTextColumn Header="{x:Static res:Resources.WinSafetyByEmployee_DataGrid_ColHead_ActivityName}"
      Width="*"
      Binding="{Binding Path=dAct.activityName}" />
</DataGrid.Columns>

请帮助如何修复此查询,现在此变体不会返回值。

我也无法在查询中找到tbl_objects因为我需要这样做,以为连接表tbl_object_has_tbl_eventsApp.glidus没有显示这样的表。

这是我的数据库的ERD:

DB ERD

1 个答案:

答案 0 :(得分:2)

尝试这样的事情(我不确定将要调用哪些导航属性):

IList dataList = (from we in App.glidusContext.tbl_workers_has_tbl_events
                  where we.worker.workerTZ == strSplit
                  select new { we.damagedVacantionEnd, 
                               we.tbl_event, 
                               we.tbl_event.tbl_activity}).ToList();

return dataList;

<强>更新

另外,看着你的xaml,你正试图绑定到你匿名类型中没有返回的属性。例如d2.damagedVacantionStart - 您尚未返回整个d2对象,因此无法绑定到其上的其他属性,无法访问d2

尝试通过在查询中返回所需的确切属性并直接绑定到这些属性来尝试简化。例如

select new { VacStart = we.damagedVacantionStart, 
             VacEnd = we.damagedVacantionEnd, 
             EvTypeName = we.tbl_event.tbl_eventsType.eventTypeName, 
             ...}).ToList();

然后在你的xaml中你可以有简单的绑定表达式:

Binding="{Binding Path=evTypeName}" />