2011-08-27 3 views
0

나는 같은 질문을 before.과 같습니다. 나는 여전히 같은 샘플을 사용하고 있습니다.LINQ를 사용하여 DataTable을 쿼리하는 데 도움이되는 또 다른 도움말

DataTable table = new DataTable(); 
    table.Columns.Add("column1", typeof(int)); 
    table.Columns.Add("column2", typeof(int)); 
    table.Columns.Add("column3", typeof(string)); 
    table.Rows.Add(1, 0, "a"); 
    table.Rows.Add(2, 1, "b"); 
    table.Rows.Add(3, 1, "c"); 
    table.Rows.Add(4, 3, "d"); 
    table.Rows.Add(5, 3, "e"); 

그리고이 값, 컬럼에서도 2 열에 나타납니다 3 열의 값을 반환 할 않았다

var x = (from t1 in table.AsEnumerable() 
     select t1.Field<int>(0)).Intersect 
     ((from t2 in table.AsEnumerable() 
     select t2.Field<int>(1)).Distinct()); 

가 어떻게 위의 LINQ에 따라 3 열의 값을 얻을 수 있습니까?

내가 허용 대답 here 사용할 수 있습니다 : 나는 생각 하지만 내가로 번역 될 수있는 최초의 LINQ의 반대에 사용할 수 없습니다

var result = (from t1 in table.AsEnumerable() 
       join t2 in table.AsEnumerable() on t1.Field<int>(0) equals t2.Field<int>(1) 

를 '누구의 3 열의 값을 돌려줍니다 열 1의 값이 이 아니며이 열 2에 표시됩니다. ' 그러나 위의 LINQ를 대신 Except()으로 변경할 수 있습니다. 단지 var x을 사용하여 행 모음을 얻거나 column3 값을 얻는 방법을 알아야합니다.

+0

? 강력하게 형식화 된 콜렉션은 대개 훨씬 낫습니다. – svick

답변

0

이 당신이 원하는 무엇을 제공해야합니다 : 왜 당신은 심지어`DataTable`를 사용하는

// collection of datarows 
var rows = table.AsEnumerable().Where(i => i.Field<int>(0) == i.Field<int>(1)); 

// collection of strings (field 3 of rows) 
var rowvalues = rows.Select(j => j.Field<string>(3)); 
관련 문제