【问题标题】:Joining two tables in one datagrid usig Linq C# WPF使用 Linq C# WPF 在一个数据网格中连接两个表
【发布时间】:2015-06-27 03:43:17
【问题描述】:

我想将两个表连接到一个数据网格中。表一:tblProjects - 表二:tblEmployeeLoginDetails

在这种方法中-private void FillProjectsDataGrid() 我想使用这种编码填充我的数据网格:

            dgViewProjects.ItemsSource = DC.tblProjects.Where<tblProject>(c => c.ProjectID != null)
                .Select<tblProject, ProjectData>(m => new ProjectData()
                {
                    ProjectID = m.ProjectID,
                    Name = m.ProjectName,
                    Status = m.ProjectStatus,
                    Employee = m.EmployeeName,
                });

            dgViewProjects.ItemsSource = DC.tblEmployeeLoginDetails.Where<tblEmployeeLoginDetail>(c => c.LoginID != null)
                .Select<tblEmployeeLoginDetail, EIDData>(m => new EIDData()
                {
                    UserID = m.LoginID,
                    Name = m.EmployeeName,
                    Surname = m.EmployeeSurname,
                    Email = m.EmployeeEmailAddress,
                    Password = m.EmployeePassword,
                    Role = m.RoleID.ToString(),
                    Department = m.EmployeeDepartment,
                    IDNumber = m.EmployeeIDNumber,
                    Gender = m.EmployeeGender,
                    Date = m.EmployeeDOB.Value,
                    HomeAddress = m.EmployeeHomeAddress,
                    Telephone = m.EmployeeTelephoneNumber,
                    City = m.EmployeeCity,
                    Province = m.EmployeeProvinceCode,
                    SetImage = m.EmployeeProfilePicture
                });

对于 tblProjects 我使用这个类:

public struct PDData
{
    public string _project;

    public int ProjectID { get; set; }
    public string Name { get; set; }
    public string Status { get; set; }
    public string Employee { get; set; }
}

对于 tblEmployeeLoginDetails 我使用这个类:

public struct EIDData
{
    public string _sts;

    public int UserID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Role { get; set; }
    public string Department { get; set; }
    public string IDNumber { get; set; }
    public string Gender { get; set; }
    public DateTime Date { get; set; }
    public string HomeAddress { get; set; }
    public string Telephone { get; set; }
    public string City { get; set; }
    public string Province { get; set; }
    public Binary SetImage { get; set; }
}

现在我想连接这两个表并在一个数据网格中显示信息。我尝试了 Linq join 语句,但出现此错误:

发生了“System.InvalidCastException”类型的未处理异常 在 Haze.exe 中

附加信息:无法转换类型的对象 'System.Data.Linq.DataQuery1[Haze.tblProject]' to type 'System.Collections.Generic.List1[Haze.tblProject]'。

最后是我的加入编码:

        List<tblProject> Join = (List<tblProject>)from u in DC.tblEmployeeLoginDetails
                                                  join b in DC.tblProjects
                                                  on u.LoginID equals b.ProjectID
                                                  where b.ProjectID != null
                                                  select b;

我不知道如何使用必须在一个数据网格中显示的类将这两个表连接在一起。如果有人有任何建议或帮助,请不要犹豫发表评论。谢谢!

【问题讨论】:

    标签: c# wpf linq join datagrid


    【解决方案1】:

    你试过了吗

        List<tblProject> Join = (from u in DC.tblEmployeeLoginDetails
                                          join b in DC.tblProjects
                                          on u.LoginID equals b.ProjectID
                                          where b.ProjectID != null
                                          select b).ToList();
    

    【讨论】:

      【解决方案2】:

      这将为您提供一个新的匿名类,其中包含您加入时的员工和项目详细信息。您拥有的联接仅返回项目的值

          var Join = (from u in DC.tblEmployeeLoginDetails
                                                    join b in DC.tblProjects
                                                    on u.LoginID equals b.ProjectID
                                                    where b.ProjectID != null
                                                    select new {Project=a, Employee=b}).ToList();
      

      然后您必须将其绑定到您的数据表,如下所示:

          dgViewProjects.ItemsSource = Join;
      

      您的第一个代码块将用第二个代码块覆盖数据源的初始设置,而不是添加到它。

      【讨论】:

      • 这成功了,非常感谢您的时间和精力! :D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      相关资源
      最近更新 更多