LINQ到SQL连接
我有一张叫做工资单的桌子。工资单可以有许多工资存根。换句话说,有一个名为PayStub的表,它是工资单的子实体。PayStub有一个名为PayrollTax的子实体。我想编写一个LINQtoSQL查询,以获取所有具有多个工资税的工资单。我使用以下查询:LINQ到SQL连接,linq,linq-to-sql,Linq,Linq To Sql,我有一张叫做工资单的桌子。工资单可以有许多工资存根。换句话说,有一个名为PayStub的表,它是工资单的子实体。PayStub有一个名为PayrollTax的子实体。我想编写一个LINQtoSQL查询,以获取所有具有多个工资税的工资单。我使用以下查询: public IList<Payroll> GetPayrollsWithPayrollTaxes() { return (from payroll in ActiveContext.Payro
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();
}
public IList GetPayrollsWithPayrollTaxes()
{
返回(来自ActiveContext.Payrolls中的工资单
在ActiveContext中加入payStub.PayStubs on payroll.PayrollID等于payStub.PayrollID
其中payStub.InternalPayrollTaxes.Count>0
选择工资单
).ToList();
}
问题是,由于工资单和工资存根之间存在一对多的关系,我最终得到了两份相同的工资单。我想要一份独特的工资单
任何想法和建议都将不胜感激 您是否尝试过
.Distinct().ToList()
或者,您可以在连接后的中添加,如下所示:
(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();
我认为使用Any
(在SQL中存在)可能会对您有所帮助
public IList<Payroll> GetPayrollsWithPayrollTaxes()
{
return (from payroll in ActiveContext.Payrolls
where ActiveContextPayStubs.Any(payStub =>
payroll.PayrollID == payStub.PayrollID &&
payStub.InternalPayrollTaxes.Any())
select payroll
).ToList();
}
public IList GetPayrollsWithPayrollTaxes()
{
返回(来自ActiveContext.Payrolls中的工资单
其中ActiveContextPayStubs.Any(payStub=>
payroll.PayrollID==payStub.PayrollID&&
payStub.InternalPayrollTaxes.Any())
选择工资单
).ToList();
}
非常感谢!.Distinct().ToList()对我很有效@Sai您应该避免对此类内容使用Distinct
,因为它的性能很差。