2010-11-22 7 views
3

데이터베이스에 구분 된 데이터로 저장되는 표 형식의 데이터가 있습니다. 이상적이지는 않습니다.하지만 그것이 시스템이 설계된 방법입니다. 나는 데이터를 꺼내서 그것을 어떤 종류의 구조로 파싱 할 필요가있다.System.Data.DataTable의 경량 대체

예전에는 DataTable을 사용하여 좋았습니다. 그러나 이제는 더러운 느낌입니다. 데이터 모델에 테이블 형식의 데이터를 저장하는 데있어보다 효율적이고 효율적이며 가벼운 구조는 무엇입니까?

+0

내가 생각하고있는 두 가지 선택을 나열 변환 및 더 많은, 그리고 DataReader를 입력 할 유형을 포함 내가 그것을 개발 한 라이브러리를 사용합니다. 우리는 6 개의 기둥으로 제한 했으므로 6 개의 기둥을 넘는 것이 필요하지 않습니다. – Josh

답변

3

글쎄, 데이터베이스의 모든 컬럼을 특성으로 갖는 클래스를 작성하십시오. 그런 다음 ICollection (List, Hashset 등)의 구현을 인스턴스화하고 채우십시오 (예 : LINQ 사용). 같은

public class Customer 
    { 
    public int Id { get; set;} 
    public string Name { get; set; } 

    public Customer(int id, string name) 
    { 
     this.Id = id; 
     this.Name = name; 
    } 
    } 

그리고 할 일이 : 데이터베이스에 저장된 데이터에 액세스하는 경우

List<Customer> customers = new List<Customer>(); 
using (DbDataReader reader = // instantiate reader) 
{ 
    while (reader.Read()) 
    { 
     Customer customer = new Customer(reader.GetInt32(0), reader.GetString(1)); 
     customers.Add(customer); 
    } 
} 

당신은 LinqToSql 또는 LinqToEntities보고 할 수 있습니다.

+0

유창한 nhibernate를 사용하고 있습니다. 이 표 형식의 데이터는 데이터베이스의 단일 필드에 구분 된 문자열로 저장됩니다. 문자열에서 객체로 파싱해야합니다. – Josh

+2

그런 다음 알고리즘을 구현하여 데이터를 추출하고 필요한 속성으로 클래스를 만들고 ICollection 을 채 웁니다. :) –

+0

아주 좋은 생각. 감사! – Josh

3

여기 Telerik 개발자 중 하나에서 경량의 DataTable의 : 데이터 바인딩 잘 작동되도록

http://blogs.telerik.com/vladimirenchev/posts/09-04-23/lightweight-datatable-for-your-silverlight-applications.aspx

그것은 INotifyCollectionChanged과에서 INotifyPropertyChanged를 지원합니다.

덜한 "더티"라고 말하지는 않지만 대안입니다.

+0

외부 라이브러리가 필요한 DataTable을 사용해야하는 이유는 무엇입니까? .NET의 컬렉션은 잘 작동합니다 ... –

+0

@ AS-CII - 나는 System.Data.DataTable처럼 작동하는 대안으로 만 언급합니다. 스스로 컴파일하여 외부 어셈블리를 피할 수 있습니다. –

+0

좋은 제안, 코빈. – Josh