在加入 C# WPF Linq 中使用 类 而不是匿名类型

Using classes instead of anonymous type in join C# WPF Linq

我需要从在 JOIN 语句中使用 anonymous 类型改为使用 classes。我的编码:

using (DataClassesDataContext DC = new DataClassesDataContext())
{
   var Join = (from a in DC.tblEmployeeLoginDetails
               join b in DC.tblProjects
               on a.LoginID equals b.ProjectID
               join c in DC.tblClientLoginDetails
               on b.ProjectID equals c.ClientLoginID
               where c.ClientLoginID != null
               select new
               { 
                  b.ProjectID, 
                  b.ProjectName, 
                  b.ProjectStatus, 
                  a.EmployeeName, 
                  a.EmployeeSurname,
                  c.ClientName,
                }).ToList();

    dgViewProjects.ItemsSource = Join;
}

我的 classes: PIDData & EIDData

PIDData:

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; }
}

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; }
}

现在我对 c# 和一般编码还很陌生,所以这对我来说有点棘手和令人沮丧。我不知道如何在我的连接语句中使用我的 classes 而不是匿名类型。

使用 classes 将帮助我更轻松地管理程序中数据网格中的数据。请分享任何建议或让我知道是否有更多信息可以帮助我回答问题,谢谢!

编辑:

这是 JOIN 现在的样子:

        using (DataClassesDataContext DC = new DataClassesDataContext())
        {
           List<Match> Join = (from a in DC.tblEmployeeLoginDetails
                        join b in DC.tblProjects
                        on a.LoginID equals b.ProjectID
                        join c in DC.tblClientLoginDetails
                        on b.ProjectID equals c.ClientLoginID
                        where c.ClientLoginID != null
                        select new Match
                        { 
                            ProjectIDM = b.ProjectID, 
                            ProjectNameM = b.ProjectName, 
                            ProjectStatusM = b.ProjectStatus, 

                            EmployeeNameM = a.EmployeeName, 
                            EmployeeSurnameM = a.EmployeeSurname,

                            ClientNameM = c.ClientName,
                        }).ToList();

           dgViewProjects.ItemsSource = Join;
        }

顽皮,我还创建了你建议的 class。

我没有收到任何错误...这非常好,但是我的 datagridview 中不再显示数据。我想可能是因为这个:

dgViewProjects.ItemsSource = Join;

如果你想使用结构 不是 DataClassesDataContext 的一部分,你可以使用匿名类型,但你可以将它转换成你自己的类型

var Join = (from a in DC.tblEmployeeLoginDetails
           join b in DC.tblProjects
           on a.LoginID equals b.ProjectID
           join c in DC.tblClientLoginDetails
           on b.ProjectID equals c.ClientLoginID
           where c.ClientLoginID != null
           select new
                    { 
                        ProjectID = b.ProjectID, 
                         ProjectName = b.ProjectName, 
                        ProjectStatus = b.ProjectStatus, 

                        EmployeeName = a.EmployeeName, 
                        EmployeeSurname = a.EmployeeSurname,

                        ClientName = c.ClientName,
                    }).ToList().Select(x => new PIDData
                   {
         ProjectID = b.ProjectID, 
         Name = b.ProjectName, 
          Status = b.ProjectStatus, 
                   }).ToList() ;

首先你制作一个 class/struct 匹配你想要的数据 return:

public class Match
{
    public int ProjectID { get; set; }
    public string ProjectName { get; set; }
    public object ProjectStatus { get; set; }
    public string EmployeeName { get; set; }
    public string EmployeeSurname { get; set; }
    public string ClientName { get; set; }
}

然后您在 select new:

中创建并填充实例
select new Match
{
    ProjectID = b.ProjectID,
    ProjectName = b.ProjectName,
    ProjectStatus = b.ProjectStatus,

    EmployeeName = a.EmployeeName,
    EmployeeSurname = a.EmployeeSurname,

    ClientName = c.ClientName,
}).ToList();

现在,您的变量 Join 将是 List<Match>

类型