LINQ-to-SQL加入

时间:2011-07-15 17:39:41

标签: linq linq-to-sql

我有一张名为Payroll的表。 Payroll可以有很多PayStub。换句话说,有一个名为PayStub的表,它是Payroll的子实体。 PayStub有一个名为PayrollTax的子实体。我想编写一个LINQ-to-SQL查询,该查询可以获得具有多个工资税的所有工资单。我使用以下查询:

public IList<Payroll> GetPayrollsWithPayrollTaxes()
        {
            return (from payroll in ActiveContext.Payrolls
                    join payStub in ActiveContext.PayStubs on payroll.PayrollID equals payStub.PayrollID
                    where payStub.InternalPayrollTaxes.Count > 0
                    select payroll
                    ).ToList();
        }

问题是因为Payroll和PayStub之间存在一对多的关系,我最终获得了两次相同的Payroll。我想要一份独特的工资单清单。

非常感谢任何想法和建议!

2 个答案:

答案 0 :(得分:1)

我认为使用Any(SQL中为EXISTS)可能会对您有所帮助。

public IList<Payroll> GetPayrollsWithPayrollTaxes()
{
      return (from payroll in ActiveContext.Payrolls
              where ActiveContextPayStubs.Any(payStub => 
                 payroll.PayrollID == payStub.PayrollID && 
                 payStub.InternalPayrollTaxes.Any())
              select payroll
              ).ToList();
        }

答案 1 :(得分:0)

您是否尝试过.Distinct().ToList()

或者您可以在into之后添加join,如下所示:

(from payroll in ActiveContext.Payrolls
 join payStub in ActiveContext.PayStubs on payroll.PayrollID equals payStub.PayrollID into payStubGroup
 where payStubGroup.Any(p => p.InternalPayrollTaxes.Any())
 select payroll
 ).ToList();