2012-05-15 2 views
-6

나는이 시도하지만 성공을 RowError HasRrror을 향하는 하나의 행을 보여주는LINQ에서 WHERE를 사용하는 방법?

var v=ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23); 
GridView1.DataSource=v; 
GridView1.DataBind(); 

있는 gridview를 받고 없지만 나는 제품 정보를 하나 개의 행을 기대하고 있어요.

+4

결과가 잘못되었습니다 ... 오류가 있습니까? – ThePower

+3

더 많은 정보를 제공하지 않으면 여기서도 성공을 거둘 수 없습니다. – Jon

+0

글쎄, 마지막으로'.ToList'가 필요하다고 생각합니다. – V4Vendetta

답변

0

난 당신이 따라서 그리드 열을 매핑하고 실패 실패 당신이 Enumerable에서 필터링 된 목록으로 변환 할 때 CopyToDataTable

ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable(); 

사용해보십시오 ProductID 말에 대한 식별자가 없습니다한다고 생각합니다.

또는 CopyToDataTable() 대신 AsDataView()을 사용할 수도 있습니다.

자세한 설명은 Binding DataRows

데이터 바인딩이 ListBindingHelper 및 TypeDescriptor를 클래스에 의해 제어를 발견 할 수있다. 목록에 바인딩하면 ListBindingHelper.GetListItemProperties 메서드가 호출되어 목록에서 열을 가져옵니다. 목록에 ITypedList 인터페이스가 구현되어 있으면 GetItemProperties 메서드가 호출됩니다. 그렇지 않으면 TypeDescriptor를 사용하여 목록의 첫 번째 항목의 속성을 가져옵니다. (이는 리플렉션을 사용하는()의 DataTable도 IListSource를 사용을 통해 결합)을 구현 ITypedList 테이블의 열에 노출 DataColumnPropertyDescriptors를 반환

DataView를 클래스. 이 때문에 DataView 또는 DataTable에 바인딩하고 열을 볼 수 있습니다. 그러나 List에 바인딩하면 이 속성으로 열을 반환 할 수있는 ITypedList가 없습니다. 따라서 그것은 리플렉션으로 돌아가서 DataRow 클래스의 물리적 속성을 보여줍니다.

+0

고마워요. 그것을 위해 +1을주고 싶지만 상대방 점수가 15 점 미만이므로 할 수 없습니다. – user1390378

+0

좋아요! ! 그것을 대답으로 표시하는 것을 잊지 마십시오. – V4Vendetta

0

시도해보십시오.

var results = from myRow in ds.Table[0].Rows 
       where myRow.Field<int>("productID") == 23 
       select myRow; 

이렇게하면 원하는 행을 얻을 수 있습니다.

관련 문제