c# - 使用 linq 根据日期之间获取结果

标签 c# linq

我有一个 Entity Framework 查询来返回工资及其客户列表:

public async Task<List<Salary>> GetSalaryByClientIdAndProfileId(int profileId, int clientId)
{
    var profileClientSalary = this._db.Salaries.Where(pc => pc.ProfileId == profileId && pc.ClientId == clientId).OrderByDescending(x => x.StartDate);
    return profileClientSalary.Include(pc => pc.Client).Where(p => p.ProfileId == profileId).ToList();
}

如您所见,我将客户端实体添加到对象中,因此我的父对象具有属性 startDate 并且客户端实体具有 ClientName, ContractStartingDateContractEndDate,我想在每个父级上获取客户端名称,其中父级 startDate 位于客户端 ContractStartingDate 之间>契约(Contract)结束日期

所以我有一个父对象的 foreach :

foreach(var salary in profileClientSalary)
{
    profile.Salaries.Add(new ProfileSalariesViewModel
    {
        StartDate = salary.StartDate,
        Customers = salary.Client.Name.Where(c => c.) 
        // Here I want to get client names where salary.startDate between Client.ContractStartingDate and Client.ContractEndDate
    });
}

注意:如果 Client.ContractEndDate 为 null,则客户端也应添加到列表中

我怎样才能实现这一目标?问候

最佳答案

另一种方法可能是使用 EF.Functions 进行日期比较,但这可能有点矫枉过正。

如果您想从多个属性组成一个日期:

var filteredSalaries = profileClientSalary.Where(salary => EF.Functions.DateFromParts(salary.year, salary.month, salary.day) >= contractStartDate &&
                                                           EF.Functions.DateFromParts(salary.year, salary.month, salary.day) <= contractendDate);

或者只是:

var filteredSalaries = profileClientSalary.Where(salary => salary.startDate >= contractstartDate &&
                                    salary.startDate <= contractendDate);

如果您不想包含确切的开始和结束日期,只需将 <= 更改为 <。

最后,如果您只想要名称。

var clientNames = filteredSalaries.select(salaries => salaries.ClientName);

关于c# - 使用 linq 根据日期之间获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75009756/

相关文章:

c# - 无障碍客户端验证错误

c# - LINQ 搜索特定字符串的字符串数组列表

c# - 了解 C# 中运行时代码生成的各种选项(Roslyn、CodeDom、Linq 表达式,...?)

c# - 在 Linq 查询中调用方法

c# - 停止特定元素的 Storyboard动画

c# - System.Decimal 是否一致?

c# - Console.Read 不返回我的 int32

c# - LINQ 中按特定时间范围分组

c# - 尝试转换匿名对象 Razor 时出错

c# - 启动一个新线程——我需要关心垃圾回收吗