问题
i have these tables in my SQL Server Express database.
my aim is to join "UserInfo" table with "RelCU" table and display the result in a wpf DataGrid.
i tried these codes but got an error while running the project.
IQueryable<RelCU> Query = from u in dbEntities.UserInfoes
join m in dbEntities.RelCUs
on u.UserID equals m.UserID into temp
from j in temp.DefaultIfEmpty()
select j;
DataGridRegisteredUsers.ItemsSource = Query;
XAML:
<DataGrid x:Name="DataGridRegisteredUsers" IsReadOnly="True" AutoGenerateColumns="False" HorizontalContentAlignment="Stretch" Margin="0,0,-1,-1"
FlowDirection="RightToLeft" Opacity="0.9" FontFamily="B Nazanin" FontSize="15">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=UserInfoes.UserID}" IsReadOnly="True"
Header="ID" />
<DataGridTextColumn Binding="{Binding Path=UserInfoes.FirstName}"
Header="First Name" />
<DataGridTextColumn Binding="{Binding Path=UserInfoes.LastName}"
Header="Last Name" />
<DataGridTextColumn Binding="{Binding Path=RelCUs.Score}"
Header="Score" />
<DataGridTextColumn Binding="{Binding Path=RelCUs.Status}"
Header="Status" />
</DataGrid.Columns>
</DataGrid>
thanks!
回答1:
You are using LEFT JOIN, and select j, so j can be null :
IQueryable<RelCU> Query = from u in dbEntities.UserInfoes
join m in dbEntities.RelCUs
on u.UserID equals m.UserID into temp
from j in temp.DefaultIfEmpty()
select new
{
ID=u.UserID,
FirstName=u.FirstName,
LastName=u.LastName,
Score = j == null? 0 : j.Score,
Status = j == null? "" :j.Status
};
DataGridRegisteredUsers.ItemsSource = Query;
XAML:
<DataGrid x:Name="DataGridRegisteredUsers" IsReadOnly="True" AutoGenerateColumns="False" HorizontalContentAlignment="Stretch" Margin="0,0,-1,-1"
FlowDirection="RightToLeft" Opacity="0.9" FontFamily="B Nazanin" FontSize="15">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=ID}" IsReadOnly="True"
Header="ID" />
<DataGridTextColumn Binding="{Binding Path=FirstName}"
Header="First Name" />
<DataGridTextColumn Binding="{Binding Path=LastName}"
Header="Last Name" />
<DataGridTextColumn Binding="{Binding Path=Score}"
Header="Score" />
<DataGridTextColumn Binding="{Binding Path=Status}"
Header="Status" />
</DataGrid.Columns>
</DataGrid>
来源:https://stackoverflow.com/questions/25601114/datagrid-itemssource-from-joined-tables-in-sql-database-using-linq