【问题标题】:C# + LINQ - inner joinC# + LINQ - 内部连接
【发布时间】:2013-12-06 17:54:08
【问题描述】:
Table: one
Column (PK): employee_ssn
Column: employee_active bit

Table: two
Column (pk): date
Column (FK): employee_ssn
Column: total_income
Column: total_expenses

使用 Linq 代码计算每位员工当年的总收入和总费用:

var SumOfSections = db.two
                .Select(x => x)
                .Where(x => x.employee_ssn.Equals(xxxxxxxxx))
                .Where(x => x.Date.Year.Equals(year))
                .GroupBy(x => x.Date)
                .Select(g => new
                {
                    Total_Income = g.Sum(x => x.total_expenses),
                    Total_Expenses= g.Sum(x => x.total_income)
                })
                .ToArray();

我需要将 INNER JOIN 合并到上述内容中,以仅包括在职员工。工作 SQL:

select two.total_income,total_expenses
from two
    INNER JOIN one  
        ON one.SSN = two.SSN
        WHERE one.Active = 1 AND two.Date='1/1/2014' AND two.SSN='xxxxxxxxx';

如何将我的 linq 代码修改为我的 sql 代码正在执行的操作?

【问题讨论】:

  • 只是一个疑问:为什么 total_income 是 total_expenses 的总和,反之亦然?

标签: sql linq select join


【解决方案1】:
var SumOfSections = (from t in db.two
                     join o in db.one on t.employee_ssn equald o.employee_ssn
                     where t.employee_ssn = "xxxxxxxxx" && o.employee_active == true
                     group t by t.date into g
                     select new {
                         Total_Income = g.Sum(x => x.total_expenses),
                         Total_Expenses= g.Sum(x => x.total_income)
                     }).ToArray();

我使用了查询语法,因为它似乎更具可读性。

【讨论】:

    【解决方案2】:

    您也可以继续使用您正在使用的符号:

    var SumOfSections = db.two.Join(db.one, o=>o.employee_ssn, t=>t.employee_ssn, (o,t)=>new {One = o, Two = t)
                    .Select(x => x)
                    .Where(x => x.Two.employee_ssn.Equals(""))
                    .Where(x => x.Two.date.Year.Equals(1234))
                    .Where(x=> x.One.employee_active == true)
                    .GroupBy(x => x.Two.date)
                    .Select(g => new
                    {
    
                        Total_Income = g.Sum(x => x.Two.total_expenses),
                        Total_Expenses = g.Sum(x => x.Two.total_income)
                    })
    
                    .ToArray();
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多