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

标签 c# linq ienumerable let

我正在使用的数据库将一对 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/

相关文章:

ienumerable - 注入(inject) IEnumerable<T> 时是否保证依赖顺序

c# - 截取窗口的 PNG 屏幕截图,但保持空气透明度

c# - 如何在 C# 中删除空格后的尾随字符?

c# - 分组/排序/分割二维列表/数组

c# - 有没有一种方法可以将两个单独的迭代器 block 合并为一个?

c# - 从现有实例创建 IList<T> 的新实例并修改它

c# - 通过 javascript 调用 C# windows 服务函数

c# - 如何防止有值(value)的数据网络服务被窃取?

c# - Linq 如何加入并获取 2 个表的值

c# - Linq 查询中的意外结果