С# linq SELECT список внутри другого списка

Здесь мои классы

public class EmployeeProjectMaster
{
    public int EmployeeProjectMasterId { get; set; }
    //Class Variables    
    //Here i wants to get list of EmployeeProjectTransaction 
    //this is the way i tried
     public EmployeeProjectMasterModelClient()
    {
        this.EmployeeProjectTransactionModel = new HashSet<EmployeeProjectTransactionModelClient>();
    }
    public virtual IEnumerable<EmployeeProjectTransactionModelClient> EmployeeProjectTransactionModel { get; set; }    
}
public class EmployeeProjectTransaction
{
    public int EmployeeProjecTransactiontId { get; set; }
    public int EmployeeProjectMasterId { get; set; }
    public int EmployeeId { get; set; }
    public string EmployeeName {get;set;}
    //Class Variables        
}
public class Employee
{
    public int EmployeeId { get; set; }
    public string Employeefullname {get;set;}        
}

Тогда вот мой запрос linq

//Get All Employee Project Details To Grid
    public ActionResult GetAllEmployeeProjectDetails()
    {
        //DataTable Parameter
        var draw = Request.Form.GetValues("draw").FirstOrDefault();
        //Paging parameter
        var start = Request.Form.GetValues("start").FirstOrDefault();
        var length = Request.Form.GetValues("length").FirstOrDefault();
        //Paging parameter
        var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
        var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();

        //filter parameter
        var searchValue = Request.Form.GetValues("search[value]").FirstOrDefault();

        List<EmployeeProjectMasterModelClient> allEmployeeProject = new List<EmployeeProjectMasterModelClient>();
        int pageSize = length != null ? Convert.ToInt32(length) : 0;
        int skip = start != null ? Convert.ToInt32(start) : 0;
        int recordsTotal = 0;

        //Database Query
        using (InnoESolutionsDbEntities oInnoESolutionsDbEntities = new InnoESolutionsDbEntities())
        {
            var v = (from Epmm in oInnoESolutionsDbEntities.EmployeeProjectMasterModels
                join Eptm in oInnoESolutionsDbEntities.EmployeeProjectTransactionModels
                    on Epmm.EmployeeProjectMasterId equals Eptm.EmployeeProjectMasterId
                select new {Epmm, Eptm});

            if (!string.IsNullOrEmpty(searchValue))
            {
                v = v.Where(b =>
                b.Epmm.ProjectModel.ProjectName.Contains(searchValue)
                );
            }

            if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
            {
                //for make sort simpler we will add system.linq.dynamic reference
                //v = v.OrderBy(sortColumn + " " + sortColumnDir);
                v = v.OrderBy(a => a.Epmm.EmployeeProjectMasterId + " " + a.Eptm.EmployeeProjectMasterId);
            }
            recordsTotal = v.Count();
            allEmployeeProject = v.Skip(skip).Take(pageSize).Where(y => y.Epmm.IsActive && !y.Epmm.IsDelete && y.Eptm.IsActive && !y.Eptm.IsDelete).Select(x => new EmployeeProjectMasterModelClient
            {
                EmployeeProjectMasterId = x.Epmm.EmployeeProjectMasterId,
                ProjectId = x.Epmm.ProjectId,
                ProjectName = x.Epmm.ProjectModel.ProjectName,
                WorkDateS = SqlFunctions.DateName("day", x.Epmm.WorkDate) + "/ " + SqlFunctions.DateName("month", x.Epmm.WorkDate) + "/ " + SqlFunctions.DateName("year", x.Epmm.WorkDate),
                SalaryForEachEmployee = x.Epmm.SalaryForEachEmployee,
                EmployeeProjectTransactionModel = *************************************How to Load Trnsaction Details As A list Here

            }).ToList();
        }
        return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = allEmployeeProject });

    }

Выше функция С# и запрос Linq для загрузки таблицы угловых данных. необходимо выбрать «Список внутри списка». Я написал запрос linq для соединения. Я не знаю, правильно ли это или нет. Когда вы ответите на мой вопрос, пожалуйста, рассмотрите этот запрос. Много раз пытался, но у меня не получилось. в запросе, когда я пытаюсь получить запись в allEmployeeProject. как загрузить сведения о транзакции В списке внутри списка allEmployeeProject символ звездочки указывает, что мне нужно сделать. мне нужен список сотрудников для конкретной основной записи.

Здесь выведите то, что я хочу

MasterId | TransactionId |Employee Id | Employee Name 

---------+---------------+------------+---------------
1        |       1       |      4     | name 1
         |       2       |      2     | name 3

person ThusharaHettigoda    schedule 29.11.2017    source источник
comment
Приятно видеть, что вы уже приложили усилия, но не могли бы вы также добавить некоторые примеры входных данных и желаемый результат?   -  person Oliver    schedule 29.11.2017
comment
@Oliver Здесь я отредактировал свой вопрос. Благодарю за ваш ответ   -  person ThusharaHettigoda    schedule 29.11.2017
comment
Вам нужно выполнить всего один запрос к базе данных, чтобы получить набор записей «мастер-модель/модель транзакций» и преобразовать его в список мастер-моделей, каждая из которых содержит список соответствующих записей? Если это так, я бы посоветовал вам использовать GroupBy.   -  person Dylan Nicholson    schedule 29.11.2017


Ответы (1)


Я думаю, что вам нужен метод GroupBy.

allEmployeeProject = v.Skip(skip).Take(pageSize).Where(y => y.Epmm.IsActive && !y.Epmm.IsDelete && y.Eptm.IsActive && !y.Eptm.IsDelete).Select(x => new EmployeeProjectMasterModelClient
        {
            EmployeeProjectMasterId = x.Epmm.EmployeeProjectMasterId,
            ProjectId = x.Epmm.ProjectId,
            ProjectName = x.Epmm.ProjectModel.ProjectName,
            WorkDateS = SqlFunctions.DateName("day", x.Epmm.WorkDate) + "/ " + SqlFunctions.DateName("month", x.Epmm.WorkDate) + "/ " + SqlFunctions.DateName("year", x.Epmm.WorkDate),
            SalaryForEachEmployee = x.Epmm.SalaryForEachEmployee
        });

var allEmployeeProjectsByMaster = allEmployeeProject.GroupBy(x => x.EmployeeProjectMasterId).ToList();

Теперь вы можете сгруппировать список транзакций по EmployeeProjectMaster с помощью переменной allEmployeeProjectsByMaster, просто сопоставьте ее с соответствующей моделью данных, используя Select.

person isidat    schedule 29.11.2017
comment
Как вы думаете, этот ответ является решением вашей проблемы? - person isidat; 30.11.2017