You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.NET Blazor中用Linq/EF查询TaxTable指定条件的数据

问题描述

我正在使用Blazor框架,尝试从DbSet<TaxTable>中获取特定结果,需求如下:

  • 薪资为620(处于600~700区间内)
  • 获取针对p2的扣除项结果(预期为70)

我编写了类似var result = await _db.TaxTable.......blah...blah...的代码,但多次尝试均失败,恳请提供正确的实现方法。

薪资扣除项对应表


解决方案

首先假设你的TaxTable实体结构大致如下(如果字段命名不同,对应调整即可):

public class TaxTable
{
    public int Id { get; set; }
    public int SalaryRangeStart { get; set; } // 区间起始值
    public int SalaryRangeEnd { get; set; } // 区间结束值
    public string DeductionCode { get; set; } // 扣除项编码(如p2)
    public int DeductionAmount { get; set; } // 扣除金额
}

对应查询代码

使用EF Core的Linq异步查询,精准匹配区间和扣除项:

int targetSalary = 620;
string targetDeductionCode = "p2";

// 执行查询,获取对应扣除金额
var deductionAmount = await _db.TaxTable
    .Where(t => t.SalaryRangeStart <= targetSalary 
                && t.SalaryRangeEnd >= targetSalary
                && t.DeductionCode == targetDeductionCode)
    .Select(t => t.DeductionAmount)
    .FirstOrDefaultAsync();

// 结果处理:找到则deductionAmount为70,未找到则为0(可根据需求修改默认值)
if (deductionAmount != 0)
{
    // 拿到预期结果,执行后续逻辑
}
else
{
    // 无匹配记录的处理逻辑
}

补充说明

  • 如果你的区间判断是左闭右开(比如600<=薪资<700),把t.SalaryRangeEnd >= targetSalary改成t.SalaryRangeEnd > targetSalary即可。
  • 若确保只有一条匹配记录,可替换FirstOrDefaultAsync()为SingleOrDefaultAsync()(多条匹配时会抛出异常,更严谨)。
  • 若需要忽略大小写匹配扣除项编码,把t.DeductionCode == targetDeductionCode改成t.DeductionCode.Equals(targetDeductionCode, StringComparison.OrdinalIgnoreCase)。

内容的提问来源于stack exchange,提问作者sayditto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:40:52