2012-03-13 5 views
1

데이터 테이블의 문자열 데이터 유형 열 합계를 계산하려고합니다.데이터 테이블의 문자열 데이터 유형 합계

Int32 omarks = Convert.ToInt32(dt.Compute("Sum(Convert(Marks, 'System.Int32'))", "")); 
tbobtained.Text = omarks.ToString(); 

하지만 난이 오류 받고 있어요 :

나는 이미 시도했다 집계 인수

구문 오류 : 가능한 아이 한정자와 하나의 열 인수 기대합니다. 이것에 대해

답변

2

방법 :

int omarks = dt.Rows.Select(dr=>(int)dr["Marks"]).Sum(); 
tbobtained.Text = omarks.ToString(); 

dr는 DataRow를 소요 람다 함수의 인수 (즉 DR의)와 마크 컬럼의 정수 값을 반환합니다.

이 코드의 작동 원리를 이해하려면 LINQC# lambda expressions을 다시 작성해야합니다.

+0

foreach 루프에서이 코드를 사용해야합니까? 이 코드에서 박사는 무엇입니까? –

+0

아, 혼란 스럽네요, 조금 편집 할게요. – zmbq

0

documentation of the expression syntax에 문제가 없다고해도 중첩 된 함수 호출이 마음에 들지 않아야합니다.

제가

... 이런 계산 열에 Convert() 호출 추출

static void Main(string[] args) 
{ 
    int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
    DataTable dt = CreateDataTable(data); 
    int omarks = Convert.ToInt32(dt.Compute("Sum(MarksInt)", "")); 
    string text = omarks.ToString(); 

    Console.WriteLine(omarks == data.Sum()); 
} 

static DataTable CreateDataTable(IEnumerable<int> data) 
{ 
    DataTable table = new DataTable(); 

    table.Columns.Add("Marks", typeof(string)); 
    table.Columns.Add("MarksInt", typeof(int), "Convert(Marks, 'System.Int32')"); 

    foreach (int i in data) 
    { 
     DataRow row = table.NewRow(); 

     row["Marks"] = i.ToString(); 

     table.Rows.Add(row); 
    } 

    return table; 
} 

시도 ... 그리고 그것은 Exception 던지고없이 실행하고, 올바르게 true를 출력한다.

+0

당신의 방법을 사용하는 베이컨, 나는 이것을 처리하는 올바른 방법으로 보이지 않는 데이터 테이블에 Extra Columns 이름 "MarksInt"를 추가해야 할 것입니다. 나는 마침내 그것을 이렇게 취급해야했다. int omarks = 0; 의 foreach (dt.Rows 된 DataRow에서 DR) { 경우 (DR [ "마크"]. ToString()! = "A") { omarks 용의 omarks + = int.Parse (DR [ "마크"]. ToString()); } } tbobtained.Text = omarks.ToString(); –

+0

저는 이것을 실제 해결책으로 제안하지 않았습니다. 그냥'Convert()'와'Sum() '을 호출하는 것이 효과가 있다는 것을 보여주었습니다. – BACON

+0

베이컨 나는 다른 질문을하고 싶다. .. plzz 당신의 이메일 주소를 알려주세요. –