Linq Query объединяет 2 списка - PullRequest
0 голосов
/ 17 апреля 2019

Во-первых, у меня есть список пользователей AD, полученных из библиотеки AD для анализа.Это имеет 2 свойства, которые меня интересуют: Phone # и EmailID.(давайте назовем это var EmployeeAD)

Во-вторых, у меня есть список пользователей со свойствами, такими как полное имя, employeeID, имя пользователя и т. д. и т. д. (не содержит phone # и emailID).

    List<Employee> employees = new List<Employee>();
    using (var ctx = new hr_employeeEntities())
    {
        var emps = (from x in ctx.F_Emp
                    join y in ctx.HR_EMPL_VW on (x.employee_id).ToString() equals y.EMPLID
                    where x.employment_status == "A"
                    select new{ x, y }).ToList();

        //PSFT_Employee is an inherited class of the abstract class Employee //
        employees = emps.Select(x => (new PSFT_Employee
        {
            employee_id = x.x.employee_id,
            full_name = x.x.employee_name,
            username = x.y.OPRID,
            date_of_birth = x.x.date_of_birth,                                       
            date_of_hire = x.x.original_hire_date,

            phone = ,
            email = x.x. ,
            }) as Employee).ToList();
         }

    return employees;

Мне нужно иметь возможность присоединиться к первому списку пользователей AD (на основе ключа - OPRID) со вторым списком emps ... чтобы я мог заполнить объект сотрудников номером телефона и электронной почтой для каждого сотрудника.

Что-то вроде: -

emps.Foreach( // for each employee in emps, join with user in employeeAD based on common OPRID. Then extract phone# and email for that user and populate in emps list//) 

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Хотя вы этого не сказали, я предполагаю, что у каждого EmployeeAd есть идентифицирующий идентификатор.Таким образом, ваша EmployeeAd будет выглядеть следующим образом:

class EmployeeAd
{
    public int Id {get; set;} // primary key
    public string PhoneNr {get; set;}
    public string Email {get; set;}
    ...
}

Фактические типы свойств не важны.Важно то, что тип свойства Id совпадает с типом свойства Emplyee Id во 2-м списке.

Если вы знаете, что у каждого сотрудника есть EmployeeAd, вы можете использовать простое (внутреннее) объединение.Вы также можете использовать это, если вы не хотите, чтобы сотрудники без EployeeAds:

var joinedEmployess = dbConext.Employees.Join(  // join Employees
    dbContext.EmployeeAdds,                     // with EmployeeAds
    employee => employee.Id,                    // from every Employee take the Id
    employeeAd => employeeAd.Id,                // from every EmployeeAd take the Id

    (employee, employeeAd) => new PSFT_Employee() // when they match make one new
    {
        // fill the Employee properties you plan to use
        Id = employee.Id,
        Name = employee.Name,
        ...

        // fill the PhoneNr and Email:
        PhoneNr = employeeAd.PhoneNr,
        Email = employeeAd.Email,
    });    
0 голосов
/ 17 апреля 2019

Не уверен, правильно ли выполнено требование, но вы ищете второе соединение?

List<Employee> employees = new List<Employee>();
using (var ctx = new hr_employeeEntities())
{
    var emps = (from x in ctx.F_Emp
                join y in ctx.HR_EMPL_VW on (x.employee_id).ToString() equals y.EMPLID
                where x.employment_status == "A"
                select new{ x, y }).ToList();

    //PSFT_Employee is an inherited class of the abstract class Employee //
    employees = emps.Join(
        users,//don't know what you have for this
        emp => emp.OPRID,
        user => user.OPRID,

        (u, e) => new { u, e })     
    .Select(a => (new PSFT_Employee
    {
        employee_id = a.u.x.employee_id,
        full_name = a.u.x.employee_name,
        username = a.u.y.OPRID,
        date_of_birth = a.u.x.date_of_birth,
        date_of_hire = a.u.x.original_hire_date,
        phone = a.e.phone,
        email = a.e.email,
        }) as Employee).ToList();
     }

return employees;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...