문제

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);

다른 팁

  1. IEnumerable<DataRow> rows = dataTable.AsEnumerable(); (System.Data.DatasetExtensions.dll)
  2. 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는 파일 이름 목록과 검색을 반복합니다 (파일 이름과 일치하는 모든 행이 아니라 해당 파일 이름으로 첫 번째 데이터를 검색하고 있다고 가정합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top