gpt4 book ai didi

c# - 我如何修复此 LINQ,以便它将一对 val 视为不同的值?

转载 作者:行者123 更新时间:2023-11-30 13:14:55 24 4
gpt4 key购买 nike

我正在使用的数据库将一对 double 值存储在两个整数列中。

IOW,Department 是一个 double 值,例如 42.12,但存储在 Dept 列(在本例中为 42)和 Subdept 列(在本例中为 12)。不要问我为什么(因为你会失望;我不能告诉你为什么,因为我不知道)。

我需要获取一个数据子集,例如“8.79到98.87之间的所有部门记录”

我有这个代码:

public IEnumerable<InventoryItem> GetDepartmentRange(double deptBegin, double deptEnd, string dbContext)
{
LoadInventoryItems(dbContext);
// Break the doubles into their component parts:
var deptStartWhole = (int)Math.Truncate(deptBegin);
var startFraction = (int)((deptBegin - deptStartWhole) * 100);
var deptEndWhole = (int)Math.Truncate(deptEnd);
var endFraction = (int)((deptBegin - deptEndWhole) * 100);

return inventoryItems
.Where(d => d.dept >= deptStartWhole)
.Where(e => e.subdept >= startFraction)
.Where(f => f.dept <= deptEndWhole)
.Where(g => g.subdept >= endFraction)
//.Where(g => g.subdept <= endFraction)
.OrderBy(o => o.dept)
.ThenBy(s => s.subdept);
}

...但它不太有效 - 使用上面的查询(部门在 8.79 和 98.87 之间)它显示部门是 98.88,这超出了我想要的范围。

我尝试了注释掉的行,但这使情况变得更糟(根本没有返回任何内容)。

我的直觉告诉我,我可能需要在这里“放手”,但不知道该怎么做。

更新

enter image description here

最佳答案

由于您在示例中将分数乘以 100,因此我假设 subdept 值只有两位数。如果是这样,也许您可​​以尝试以下代码:

public IEnumerable<InventoryItem> GetDepartmentRange(double deptBegin, double deptEnd, string dbContext)
{
LoadInventoryItems(dbContext);

return inventoryItems
.Where(d => ((d.dept * 100 + d.subdept) >= deptBegin * 100) &&
((d.dept * 100 + d.subdept) <= deptEnd * 100))
.OrderBy(o => o.dept)
.ThenBy(s => s.subdept);
}

关于c# - 我如何修复此 LINQ,以便它将一对 val 视为不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com