C# 在数据表中查找最接近我的参数的行

C# 在数据表中查找最接近我的参数的行,c#,linq,C#,Linq,我有一个datatable,我想找到TRK_Distance的最接近值的行并返回它。我尝试了这个,但它抛出了一个异常,即它找不到列ABS(TRK_Distance-1600)(1600是我输入的值) 我怎样才能做到这一点?有没有比我现在做的更好的方法呢?我想你可以用linq做到这一点: var closest = data.Select(). OrderBy(dr => Math.Abs((int)dr["TRK_Distance"] - 1600)). FirstOr

我有一个datatable,我想找到TRK_Distance的最接近值的行并返回它。我尝试了这个,但它抛出了一个异常,即它找不到列ABS(TRK_Distance-1600)(1600是我输入的值)


我怎样才能做到这一点?有没有比我现在做的更好的方法呢?

我想你可以用linq做到这一点:

  var closest = data.Select().
    OrderBy(dr => Math.Abs((int)dr["TRK_Distance"] - 1600)).
    FirstOrDefault();

林克不能用ABS。您需要手动执行此操作或在dbms上执行查询。是否有方法使用linq获取最接近的值?i、 我可以用不同的方式来表达这个问题并得到我想要的结果吗?据我所知不是这样。您很可能必须使用循环。是否有某种方法可以使用列出的想法@并将其应用于数据表?这将返回一个双精度而不是数据行。@PlTaylor,您是对的。我已经编辑了我的答案,使最接近的是一个数据行。除了转换为int之外,这是有效的。但这是我的错误,没有指定1600实际上是1600.0。最后我得到了data.Select().OrderBy(dr=>Math.Abs(Convert.ToDouble(dr[parameter])-entry)).ToList()[0];供将来参考。如果您知道dr[parameter]的类型,可以通过强制转换而不是使用Convert.ToDouble来避免额外的装箱开销。i、 e.(double)dr[parameter]//我知道dr[parameter]包含一个double。您应该只调用First()或FirstOrDefault()而不是ToList()[0]
  var closest = data.Select().
    OrderBy(dr => Math.Abs((int)dr["TRK_Distance"] - 1600)).
    FirstOrDefault();