asp.net C #에서 데이터 테이블을 분할하는 또 다른 방법은 무엇입니까?

매니쉬 싱
 DataTable tbl = new DataTable();
 tbl.Columns.Add("Column");
 for (int i = 0; i < 61; i++)
  tbl.Rows.Add(i.ToString());


                 DataTable[] splittedtables = tbl.AsEnumerable()
                    .Select((row, index) => new { row, index })
                    .GroupBy(x => x.index / 12)  // integer division, the fractional part is truncated
                    .Select(g => g.Select(x => x.row).CopyToDataTable())
                    .ToArray();

                DataTable dtarr1 = splittedtables[0];
  • 이것은 내 코드입니다. 잘 작동하지만 가장 효율적인 방법을 원합니다.
블루 셔츠 개발자

주석에서 List를 DataTable로 변환하려는 경우 :

내가 사용하는 일반적인 방법은 다음과 같습니다.

ConvertToDataTable

 public static DataTable CopyToDataTable<T>(this IEnumerable<T> source)
    {

        return new ObjectShredder<T>().Shred(source, null, null);
    }

public class ObjectShredder<T>
{
    private FieldInfo[] _fi;
    private PropertyInfo[] _pi;
    private Dictionary<string, int> _ordinalMap;
    private Type _type;

    public ObjectShredder()
    {
        _type = typeof(T);
        _fi = _type.GetFields();
        _pi = _type.GetProperties();
        _ordinalMap = new Dictionary<string, int>();
    }

    public DataTable Shred(IEnumerable<T> source, DataTable table, LoadOption? options)
    {
        if (typeof(T).IsPrimitive)
        {
            return ShredPrimitive(source, table, options);
        }


        if (table == null)
        {
            table = new DataTable(typeof(T).Name);
        }

        // now see if need to extend datatable base on the type T + build ordinal map
        table = ExtendTable(table, typeof(T));

        table.BeginLoadData();
        using (IEnumerator<T> e = source.GetEnumerator())
        {
            while (e.MoveNext())
            {
                if (options != null)
                {
                    table.LoadDataRow(ShredObject(table, e.Current), (LoadOption)options);
                }
                else
                {
                    table.LoadDataRow(ShredObject(table, e.Current), true);
                }
            }
        }
        table.EndLoadData();
        return table;
    }

    public DataTable ShredPrimitive(IEnumerable<T> source, DataTable table, LoadOption? options)
    {
        if (table == null)
        {
            table = new DataTable(typeof(T).Name);
        }

        if (!table.Columns.Contains("Value"))
        {
            table.Columns.Add("Value", typeof(T));
        }

        table.BeginLoadData();
        using (IEnumerator<T> e = source.GetEnumerator())
        {
            Object[] values = new object[table.Columns.Count];
            while (e.MoveNext())
            {
                values[table.Columns["Value"].Ordinal] = e.Current;

                if (options != null)
                {
                    table.LoadDataRow(values, (LoadOption)options);
                }
                else
                {
                    table.LoadDataRow(values, true);
                }
            }
        }
        table.EndLoadData();
        return table;
    }

    public DataTable ExtendTable(DataTable table, Type type)
    {
        // value is type derived from T, may need to extend table.
        foreach (FieldInfo f in type.GetFields())
        {
            if (!_ordinalMap.ContainsKey(f.Name))
            {
                DataColumn dc = table.Columns.Contains(f.Name) ? table.Columns[f.Name]
                    : table.Columns.Add(f.Name);
                _ordinalMap.Add(f.Name, dc.Ordinal);
            }
        }
        foreach (PropertyInfo p in type.GetProperties())
        {
            if (!_ordinalMap.ContainsKey(p.Name))
            {
                DataColumn dc = table.Columns.Contains(p.Name) ? table.Columns[p.Name]
                    : table.Columns.Add(p.Name);
                _ordinalMap.Add(p.Name, dc.Ordinal);
            }
        }
        return table;
    }

    public object[] ShredObject(DataTable table, T instance)
    {

        FieldInfo[] fi = _fi;
        PropertyInfo[] pi = _pi;

        if (instance.GetType() != typeof(T))
        {
            ExtendTable(table, instance.GetType());
            fi = instance.GetType().GetFields();
            pi = instance.GetType().GetProperties();
        }

        Object[] values = new object[table.Columns.Count];
        foreach (FieldInfo f in fi)
        {
            values[_ordinalMap[f.Name]] = f.GetValue(instance);
        }

        foreach (PropertyInfo p in pi)
        {
            values[_ordinalMap[p.Name]] = p.GetValue(instance, null);
        }
        return values;
    }





}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C #을 사용하여 asp.net의 SQL 테이블에서 각 행과 각 열의 데이터를 읽는 방법은 무엇입니까?

분류에서Dev

C # ASP.NET에서 다른 셀 값을 따르도록 데이터 그리드 헤더를 변경하는 방법은 무엇입니까?

분류에서Dev

c # asp.net-다른 스레드에서 현재 페이지 URL을 찾는 방법은 무엇입니까?

분류에서Dev

asp.net core 3.1 mvc의 다른 테이블에서보기에 categoryId 대신 범주 이름을 표시하는 방법은 무엇입니까?

분류에서Dev

Asp .Net C #의 날짜에서 데이터를 필터링하는 방법은 무엇입니까?

분류에서Dev

Edit View ASP.NET MVC에서 두 테이블을 업데이트하는 방법은 무엇입니까?

분류에서Dev

.Net 4.5 또는 .Net 4의 웹 서비스에서 데이터 테이블을 반환하는 방법은 무엇입니까?

분류에서Dev

asp .Net C #의 데이터 테이블에서 .xls를 만드는 가장 좋은 방법은 무엇입니까?

분류에서Dev

ASP.NET MVC에서 테이블의 ID를 다른 테이블에 저장하는 방법은 무엇입니까?

분류에서Dev

Membership Asp.net MVC 4에서 관계를 가진 다른 테이블을 만드는 방법은 무엇입니까?

분류에서Dev

ASP.NET C #의 EventHandler에서 페이지를 수정하는 올바른 방법은 무엇입니까?

분류에서Dev

한 테이블에서 다른 테이블로 기존 테이블에 특정 열과 데이터 행을 삽입하는 방법은 무엇입니까?

분류에서Dev

한 테이블을 다른 테이블에서 업데이트하는 방법은 무엇입니까?

분류에서Dev

.net의 다른 데이터 테이블을 기반으로 하나의 데이터 테이블 행을 제거하는 방법은 무엇입니까?

분류에서Dev

Asp.net 코어에서 뷰 데이터를 부분 뷰로 전달하는 방법은 무엇입니까?

분류에서Dev

Postgres 용 C #에서 테이블 필드의 데이터베이스 데이터 유형을 얻는 가장 빠르고 빠른 방법은 무엇입니까?

분류에서Dev

SQL : 다른 테이블의 테이블에서 다른 값을 선택하는 방법은 무엇입니까?

분류에서Dev

SQL : 다른 테이블의 테이블에서 다른 값을 선택하는 방법은 무엇입니까?

분류에서Dev

다중 (또는 중복) 텍스트 데이터로 r에서 테이블을 피벗하는 방법은 무엇입니까?

분류에서Dev

Entity Framework를 통해 다 대다 테이블에 액세스하는 방법은 무엇입니까? asp.net

분류에서Dev

다른 테이블에서 업데이트 된 데이터를 INSERT INTO하는 방법은 무엇입니까?

분류에서Dev

테이블을 데이터 결과의 다른 확률에 매핑하는 방법은 무엇입니까?

분류에서Dev

한 데이터베이스에서 다른 데이터베이스로 테이블을 업데이트하는 방법은 무엇입니까?

분류에서Dev

SQL 다른 테이블에서 값을 얻는 방법은 무엇입니까?

분류에서Dev

ASP.NET Core를 사용하여 데이터베이스의 다른 폴더에 이미지를 저장하는 방법은 무엇입니까?

분류에서Dev

asp.net을 사용하여 사용자 정의 테이블에 데이터를 표시하는 방법은 무엇입니까?

분류에서Dev

능력이 다른 테이블에있을 때 테이블에서 데이터를 선택하는 방법은 무엇입니까?

분류에서Dev

다른 테이블의 테이블에 데이터를 저장하는 방법은 무엇입니까?

분류에서Dev

SQL / SpatiaLite : 다른 테이블에서 데이터를 삽입 할 때 특정 열에 기본값을 삽입하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    C #을 사용하여 asp.net의 SQL 테이블에서 각 행과 각 열의 데이터를 읽는 방법은 무엇입니까?

  2. 2

    C # ASP.NET에서 다른 셀 값을 따르도록 데이터 그리드 헤더를 변경하는 방법은 무엇입니까?

  3. 3

    c # asp.net-다른 스레드에서 현재 페이지 URL을 찾는 방법은 무엇입니까?

  4. 4

    asp.net core 3.1 mvc의 다른 테이블에서보기에 categoryId 대신 범주 이름을 표시하는 방법은 무엇입니까?

  5. 5

    Asp .Net C #의 날짜에서 데이터를 필터링하는 방법은 무엇입니까?

  6. 6

    Edit View ASP.NET MVC에서 두 테이블을 업데이트하는 방법은 무엇입니까?

  7. 7

    .Net 4.5 또는 .Net 4의 웹 서비스에서 데이터 테이블을 반환하는 방법은 무엇입니까?

  8. 8

    asp .Net C #의 데이터 테이블에서 .xls를 만드는 가장 좋은 방법은 무엇입니까?

  9. 9

    ASP.NET MVC에서 테이블의 ID를 다른 테이블에 저장하는 방법은 무엇입니까?

  10. 10

    Membership Asp.net MVC 4에서 관계를 가진 다른 테이블을 만드는 방법은 무엇입니까?

  11. 11

    ASP.NET C #의 EventHandler에서 페이지를 수정하는 올바른 방법은 무엇입니까?

  12. 12

    한 테이블에서 다른 테이블로 기존 테이블에 특정 열과 데이터 행을 삽입하는 방법은 무엇입니까?

  13. 13

    한 테이블을 다른 테이블에서 업데이트하는 방법은 무엇입니까?

  14. 14

    .net의 다른 데이터 테이블을 기반으로 하나의 데이터 테이블 행을 제거하는 방법은 무엇입니까?

  15. 15

    Asp.net 코어에서 뷰 데이터를 부분 뷰로 전달하는 방법은 무엇입니까?

  16. 16

    Postgres 용 C #에서 테이블 필드의 데이터베이스 데이터 유형을 얻는 가장 빠르고 빠른 방법은 무엇입니까?

  17. 17

    SQL : 다른 테이블의 테이블에서 다른 값을 선택하는 방법은 무엇입니까?

  18. 18

    SQL : 다른 테이블의 테이블에서 다른 값을 선택하는 방법은 무엇입니까?

  19. 19

    다중 (또는 중복) 텍스트 데이터로 r에서 테이블을 피벗하는 방법은 무엇입니까?

  20. 20

    Entity Framework를 통해 다 대다 테이블에 액세스하는 방법은 무엇입니까? asp.net

  21. 21

    다른 테이블에서 업데이트 된 데이터를 INSERT INTO하는 방법은 무엇입니까?

  22. 22

    테이블을 데이터 결과의 다른 확률에 매핑하는 방법은 무엇입니까?

  23. 23

    한 데이터베이스에서 다른 데이터베이스로 테이블을 업데이트하는 방법은 무엇입니까?

  24. 24

    SQL 다른 테이블에서 값을 얻는 방법은 무엇입니까?

  25. 25

    ASP.NET Core를 사용하여 데이터베이스의 다른 폴더에 이미지를 저장하는 방법은 무엇입니까?

  26. 26

    asp.net을 사용하여 사용자 정의 테이블에 데이터를 표시하는 방법은 무엇입니까?

  27. 27

    능력이 다른 테이블에있을 때 테이블에서 데이터를 선택하는 방법은 무엇입니까?

  28. 28

    다른 테이블의 테이블에 데이터를 저장하는 방법은 무엇입니까?

  29. 29

    SQL / SpatiaLite : 다른 테이블에서 데이터를 삽입 할 때 특정 열에 기본값을 삽입하는 방법은 무엇입니까?

뜨겁다태그

보관