2011-03-28 14 views
8

DataTable. DataRow ve DataTable eşleştirmelerini desteklemem gerektiğinden, bu türler için haritalayıcıları uygulamaya çalışıyorum. Ve dürüstçe belgeleme yeterince iyi değil ve ona bir şans vermek istedim. Belki Omu veya bu kütüphanenin diğer kullanıcıları cevap verecektir.ValueInjecter ve ben bu yüzden bizim evde yetiştirilen küçük ORM kullanabilirsiniz ValueInjecter anlamaya çalışıyordu

burada bu oldukça iyi çalışıyor benim DataRow enjektör

public class DataRowInjection: KnownSourceValueInjection<DataRow> 
    { 
     protected override void Inject(DataRow source, object target) 
     { 
      for (var i = 0; i < source.ItemArray.Count(); i++) 
      { 

       //TODO: Read from attributes or target type 
       var activeTarget = target.GetProps().GetByName(source.Table.Columns[i].ToString(), true); 
       if (activeTarget == null) continue; 

       var value = source.ItemArray[i]; 
       if (value == DBNull.Value) continue; 

       activeTarget.SetValue(target, value); 
      } 
     } 
    } 

olduğunu. İşte bu yüzden DataTable için bunu nasıl uygulayabilirim ve Ienumarable veya IList'i nasıl iade edebilirim. yapmayı umduğum kod parçacığı gibidir. Bu işlemi nasıl gerçekleştirebilirim ( ) Biraz önce KnownSourceValueInjection<DataTable> kullanmak, sen

i OMÜ yardımıyla sen DataRow için yaptım aynı

public class DataTableInjection<T> : ValueInjection where T : new() 
    { 
     protected override void Inject(object source, object target) 
     { 
      var dt = source as DataTable; 
      var t = target as IList<T>; 

      foreach (DataRow dr in dt.Rows) 
      { 
       var t2 = new T(); 
       t2.InjectFrom<DataRowInjection>(dr); 
       t.Add(t2); 
      } 
     } 
    } 
+2

awesome :), oldukça basit görünüyor – Omu

cevap

5

ile yazdığı tam kodudur burada ~~~~~~ ederiz.

Ayrıca, void yöntemini de görebildiğiniz gibi, void yöntemini de görebildiğiniz gibi, hiçbir şey döndürmüyorsunuz, yalnızca hedef nesneyi (zaten var olan) değiştirirsiniz.

mevcut bir birine değerleri enjekte InjectFrom yeni nesneler yaratmaz unutmayın.

Yani yaşayacaksın:

public class My<T> : ValueInjection 
    { 
     protected override void Inject(object source, object target) 
     { 
      var dt = source as DataTable; 
      var t = target as IList<T>; 
... 
     } 
    } 

Ve: sizin durumunuzda Aslında

var list = new List<T>(); 
list.InjectFrom<MyFromDataTableInj>(dataTable) 

bunu böyle yapabileceği tek DataTable dan IList<T> bu enjeksiyon kullanacağız kullanımı:

list.InjectFrom<My<Foo>>(datatable): 
+0

i bunu değerlendirecek. teşekkür ederim. i bunu biraz – adt

+0

:) geceleri kod ve size bildirecektir. – Omu

+0

i f5'ing am kaydetmiştiniz @adt – adt

İlgili konular