2011-11-03 2 views
0

데이터 테이블이 있고 TRK_Distance에 가장 가까운 값을 가진 행을 찾고 반환하려고합니다. 나는이 시도하고 그것이 열 ABS를 찾을 수 없다는 예외 (TRK_Distance - 1600)가 발생내 매개 변수에 가장 가까운 데이터 테이블에서 행 찾기

var tempRow = data.Select("*", "ABS(TRK_Distance - " + entry+ ")")[0]; 

어떻게 이것을 달성 할 수있다 (1600 내가 항목에서 통과하고 내 값을)? 그리고 내가 지금 어떻게하는지보다 더 좋은 방법이 있을까요?

+0

Linq는이 ABS를 사용할 수 없습니다. DBMS에서 수동으로 수행하거나 쿼리를 수행해야합니다. – Polynomial

+0

linq을 사용하여 가장 가까운 값을 얻을 수있는 방법이 있습니까? 즉 내가 이것을 다르게 공식화하고 내가 원하는 결과를 얻을 수 있습니까? – PlTaylor

+0

내가 아는 것은 아닙니다. 루프를 사용해야 할 가능성이 큽니다. – Polynomial

답변

2

난 당신이 LINQ이 할 수 있다고 생각 :

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

은 DataRow가 아닌 ​​double을 반환합니다. – PlTaylor

+0

@Pl 테일러, 당신 말이 맞아요. 가장 가까운 것이 DataRow라는 것과 같은 대답을 편집했습니다. – Sean

+0

int 로의 변환을 제외하고는 작동합니다. 그러나 그것은 1600이 실제로 1600.0이라는 것을 지정하지 않은 것에 대한 제 잘못입니다. Data.Select(). OrderBy (Dr => Math.Abs ​​(Convert.ToDouble (dr [parameter]) - entry)) .ToList() [0]; 나중에 참조 할 수 있도록 – PlTaylor

관련 문제