2015-01-21 2 views
0

나는이 다음 코드 :방법에 고유 한 값을 얻을 수있는 DataTable을

string strQuery = ""; 

using (SqlConnection scCon = new SqlConnection(connString)) 
{ 
    using (SqlCommand scCmd = new SqlCommand("locZ", scCon)) 
    { 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     DataTable dt = new DataTable(); 
     scCmd.CommandType = CommandType.StoredProcedure; 

     scCmd.Parameters.Add("@Loc", SqlDbType.VarChar).Value = Loc.SelectedItem.Value; 

     sda.SelectCommand = scCmd; 
     sda.Fill(dt); 

     foreach (DataRow dr in dt.Rows) 
     { 
      strQuery += dr["Spec"].ToString() + "<br />"; 
     } 

     Label1.Text = strQuery; 

     Session.Add("DTTa", dt); 
    } 
} 

어떻게 내가 그 열에만 고유 한 값을 얻을 수 있도록 코드를 수정할 수 있습니까? 당신이 짧고 효율적인 DistinctBy 방법을 사용하여 만들 수 있습니다

var distinctRows = dt.AsEnumerable() 
        .GroupBy(row => row.Field<string>("Spec")) 
        .Select(g => g.First()); 

foreach (DataRow dr in distinctRows) 
{ 
} 

:

+0

이 [link] (http://geekswithblogs.net/GinoAbraham/archive/2011/03/29/getting-distinct-column-values-from-a-cdatatable-again.aspx) 도움이 될 수도 있습니다 – prasy

답변

1

당신은 LINQDataTable에 사용 할 수 있습니다 싶어 한 컬럼의 값을 얻을 경우

var distinctRows = dt.AsEnumerable() 
        .DistinctBy(row => row.Field<string>("Spec")); 

을 그들에게 당신을 연결 foreach도 필요하지 않습니다.

var distinctValues = dt.AsEnumerable() 
         .Select(row => row.Field<string>("Spec")) 
         .Distinct(); 
Label1.Text = string.Join("<br />", distinctValues); 
+0

'.AsEnumerable'을가집니다. 이 확장 기능이 있습니까? 감사. – SearchForKnowledge

+0

'인스턴스 인수 : 'System.Data.DataRowCollection'에서 'System.Data.DataTable'로 변환 할 수 없습니다. – SearchForKnowledge

+1

@SearchForKnowledge 죄송합니다. 내 잘못입니다. '.Rows'를 제거해야합니다. –

관련 문제