2013-04-15 5 views
0

데이터 테이블에서 열의 최대 값을 찾으려고합니다. 다음은 내 코드입니다 데이터 테이블에서 열의 최대 값을 찾는 방법은 무엇입니까?

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"].AsEnumerable().Max(r => Convert.ToBoolean(int.TryParse(r.Field<string>("ROWNUM"), out intROWNUM)) ? (int?)intROWNUM : null); 

및 ID 아래의 최대 값을 얻으려고 노력하고 intROWNUM

에 입력 유형 'System.Decimal'의 개체를 캐스팅 할 수 없습니다

그것을 할당하는 동안 나는 점점 오전 오류

'System.String'

누군가가 나를 문제 해결에 도울 수 있습니까? 이것은 오랫동안 나를 괴롭혔다. 미리 감사드립니다 ...

+0

오류 메시지가 매우 분명합니다. –

답변

2

당신의 필드 ROWNUM은 십진법 유형이며, 당신이 오류를 얻는 이유는 그것을 문자열로 형변환하려고하기 때문입니다.

그것은해야한다 :

r.Field<decimal>("ROWNUM").ToString()

회원님이 부울로 변환하고 다시 int로 int를 구문 분석하는 이유 정말 확인합니다.

귀하의 질문은 다음과 같아야합니다

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"] 
        .AsEnumerable() 
        .Max(r => r.Field<decimal>("ROWNUM")); 
+1

감사합니다. Habib, 답변 해 주셔서 감사합니다. 그것은 나를 도왔다. 그러나 데이터 테이블에 데이터가없는 경우 던지고 오류가 나는 것처럼 보입니다. 데이터 테이블없이 데이터 테이블이 비어 있으면 이것이 오류라고 가정합니다. "지정된 캐스트에 문제가있다." – user545359

+1

@user545359이면 테이블 존재 여부와'if (dsloadReferralCodes! = null && dsloadReferralCodes.Tables.Count> 0 && dsloadReferralCodes.Tables [ "dtReferralCodesTable"]! = null && dtReferralCodesTable.Tables [ "dtReferralCodesTable.Tables [ "] .Rows.Count> 0)' – Habib

+0

다시 감사합니다. 당신의 대답은 제게 많은 도움이되었습니다. 내 질문에 대한 답변 게시에 대해 사과드립니다. 저는 Stackoverflow 포럼뿐만 아니라 C#의 초보자입니다. 이 포럼은 정말 대단합니다. – user545359

2

당신이 DataTable.Select()과 간단한 방식으로 그것을 얻을 수 있습니다

DataRow [] dr = dsloadReferralCodes.Tables["dtReferralCodesTable"].Select("ROWNUM= MAX(ROWNUM)"); 

if(dr !=null) 
    { 
    // Console.WriteLine(dr[0]["RowNum"]); 
     int maxVal=Convert.ToInt32(dr[0]["RowNum"]); 
    } 
+0

안녕하세요 Arshad, 답장을 보내 주셔서 감사합니다.구문에서 데이터 테이블의 최대 행을 제공하는 것처럼 보입니다. 사실 나는 특정 열의 최대 값을 찾으려고합니다. 열 "rownum"최대 값이 ('8', '9', '10', '11') 인 경우를 가정하십시오. 이 값의 최대 값을 '11'로 찾고 싶습니다. – user545359

+0

그래서 위 내용을 시도해 보셨습니까? – Arshad

+0

예 위의 솔루션을 시도하고 그 최대 값을 기반으로 전체 행을 반환. ROWNUM 열의 최대 값을 얻는 방법이 있습니까? – user545359

0

무엇에 대해 :

maxVal = (decimal) dsloadReferralCodes.Tables["dtReferralCodesTable"].Compute("Min(ROWNUM)", string.Empty); 

(이 LINQ를 사용하지 않습니다 , 그것은 또한 .net 2.0을 위해 작동 할 것이다)

관련 문제