DataTable을 열거 할 수있는 방법은 무엇입니까?
-
22-07-2019 - |
문제
DataTable에서 asenumerable ()을 사용할 수 없으며 C# 3을 사용하고 있지만 2.0 프레임 워크를 대상으로합니다 (LINQ 기능은 Linqbridge). select ()를 사용하지 않고 데이터 가능하게 열거 할 수있는 방법이 있습니까?
bool isExisting = (bdsAttachments.DataSource as DataTable).Select().Any(xxx => (string)dr["filename"] == filename);
업데이트:
나는 그것을 다음처럼 보이게 만들고 싶었다 :
bool isExisting = (bdsAttachments.DataSource as DataTable).AsEnumerable().Any(xxx => (string)dr["filename"] == filename);
데이터 가능한 선택 방법이 사본을 반환한다는 사실을 인정하고 있습니다. 나는 단지 asenumerable을 사용하고 있다고 생각합니다. 문제는 2.0 프레임 워크, system.data.datasetextensions를 사용할 수 없습니다.
BTW, 나는 이것을 시도했다 : http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/01/15/284.aspx, 그러나 컴파일 오류가 있습니다.
해결책
public static IEnumerable<DataRow> EnumerateRows(this DataTable table)
{
foreach (var row in table.Rows)
{
yield return row;
}
}
전화 할 수 있습니다.
bool isExisting = (bdsAttachments.DataSource as DataTable).EnumerateRows().Any(dr => (string)dr["filename"] == filename);
다른 팁
IEnumerable<DataRow> rows = dataTable.AsEnumerable();
(System.Data.DatasetExtensions.dll)IEnumerable<DataRow> rows = dataTable.Rows.OfType<DataRow>();
(System.core.dll)
열거자를 엄격하게 유지하십시오 2.0 :
public static IEnumerable<DataRow> getRows(DataTable table)
{
foreach (DataRow row in table.Rows)
{
yield return row;
}
}
그런 다음 Linqbridge와 다음과 같이 호출하십시오.
bool isExisting = getRows(bdsAttachments.DataSource as DataTable).Any(row => (string)row["filename"] == filename);
데이터 테이블을 ienumerable로 캐스팅하고 세트를 반복 할 수 있습니다.
//your data exists as a DataTable
DataTable dt = (DataTable)bdsAttachments.DataSource;
foreach (DataRow row in dt)
{
if (row["filename"] == filename)
return row;
}
Foreach는 파일 이름 목록과 검색을 반복합니다 (파일 이름과 일치하는 모든 행이 아니라 해당 파일 이름으로 첫 번째 데이터를 검색하고 있다고 가정합니다).
제휴하지 않습니다 StackOverflow