【问题标题】:How to include the GroupBy() elements in Select() in Linq to Sql query如何在 Linq to Sql 查询中的 Select() 中包含 GroupBy() 元素
【发布时间】:2016-09-29 19:52:28
【问题描述】:

我有一个 Linq to sql 查询:

IEnumerable<PY_History_TransactionTAB> FilteredReport;

var ReportData = db.PY_History_TransactionTAB.AsEnumerable()
                 .Where(x => x.SystemCode == SysCode)
                 .GroupBy(x => new 
                 { 
                   x.EmployeeCode,
                   x.EmployeeMaster.Emp_FullName,
                   x.Designations.Title,
                   department = x.Departments.Title
                 });

FilteredReport = ReportData.Select(x => new PY_History_TransactionTAB
                {
                    EmployeeCode = x.Key.EmployeeCode,
                    H_SalaryDays = x.Sum(y => y.H_SalaryDays ?? 0),
                    H_NET_Overtime = x.Sum(y => y.H_NET_Overtime),
                    H_Overtime_Amount = x.Sum(y => y.H_Overtime_Amount),
                    H_SL_Breakup1 = x.Sum(y => y.H_SL_Breakup1 ?? 0),                       
                    H_OT_Allowance1 = x.Sum(y => y.H_OT_Allowance1 ?? 0),                      
                }).ToList();

现在,如果我想在 Select() 中添加 GroupBy 成员 x.EmployeeCode,它需要它,并且工作正常,但我不知道如何将导航属性 x.EmployeeMaster.Emp_FullName 包含到 Select() 中,这是 GroupBy() 的下一个成员。我知道我在 Select() 中引用的模型 PY_History_TransactionTAB 不包含 Emp_FullName 的定义,但它包含导航属性的定义,即 EmployeeMaster

那么,有没有办法在 Select() 中包含导航属性 x.EmployeeMaster.Emp_FullName,以便我可以在强类型视图中访问它们?

为方便起见,以下是我的视图:

@model IEnumerable<HrAndPayrollSystem.Models.PY_History_TransactionTAB>
        <tr>                
            <th>
                @Html.DisplayNameFor(model => model.EmployeeCode)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Departments.Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.EmployeeMaster.Emp_FullName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Designations.Title)
            </th>             
            <th>
                @Html.DisplayNameFor(model => model.H_SalaryDays)
            </th>
            .
            .
            . // Other Elements
       </tr>

在上面的视图中,我可以访问model.EmployeeCode,但我无法访问的是model.EmployeeMaster.Emp_FullName 和类似的其他导航属性。

那么,我的问题是如何修改我的 linq to sql 查询以获得正确的结果视图?

【问题讨论】:

  • 您是指x.Key.Emp_FullName 部分?
  • @JonHanna,没错,是的,包括其他导航属性x.Key .Titlex.Key.department,如何添加所有此类属性?

标签: linq-to-sql asp.net-mvc-5


【解决方案1】:

以这种方式修改您的查询:

FilteredReport = ReportData.Select(x => new PY_History_TransactionTAB
            {
                EmployeeCode = x.Key.EmployeeCode,
                EmployeeMaster = x.First().EmployeeMaster,
                .
                .    // other attributes
                .
            }).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多