在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
相关产品推荐
相关产品推荐

