<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx</link><description>A number of people have asked me for a VB version of the CopyToDataTable&amp;lt;T&amp;gt; sample I wrote a few months back.&amp;#160;&amp;#160; Unfortunately, between getting some skiing in (lots of snow in Washington this year!) and getting Astoria ready for Mix, I</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title> &amp;raquo; Pathetic Plea for help MSDN Blog Feed</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7078647</link><pubDate>Fri, 11 Jan 2008 22:58:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7078647</guid><dc:creator> » Pathetic Plea for help MSDN Blog Feed</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://msdn.blogsforu.com/msdn/?p=4718"&gt;http://msdn.blogsforu.com/msdn/?p=4718&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>re: Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7103127</link><pubDate>Mon, 14 Jan 2008 02:28:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7103127</guid><dc:creator>Matthew</dc:creator><description>&lt;p&gt;Imports Microsoft.VisualBasic&lt;/p&gt;
&lt;p&gt;Imports System&lt;/p&gt;
&lt;p&gt;Imports System.Collections.Generic&lt;/p&gt;
&lt;p&gt;Imports System.Linq&lt;/p&gt;
&lt;p&gt;Imports System.Text&lt;/p&gt;
&lt;p&gt;Imports System.Data&lt;/p&gt;
&lt;p&gt;Imports System.Reflection&lt;/p&gt;
&lt;p&gt;Namespace WindowsFormsApplication1&lt;/p&gt;
&lt;p&gt;	Friend Class Sample&lt;/p&gt;
&lt;p&gt;		Shared Sub Main(ByVal args() As String)&lt;/p&gt;
&lt;p&gt;			' create sequence &lt;/p&gt;
&lt;p&gt;			Dim items() As Item = New Item() { New Book With {.Id = 1, .Price = 13.50, .Genre = &amp;quot;Comedy&amp;quot;, .Author = &amp;quot;Jim Bob&amp;quot;}, New Book With {.Id = 2, .Price = 8.50, .Genre = &amp;quot;Drama&amp;quot;, .Author = &amp;quot;John Fox&amp;quot;}, New Movie With {.Id = 1, .Price = 22.99, .Genre = &amp;quot;Comedy&amp;quot;, .Director = &amp;quot;Phil Funk&amp;quot;}, New Movie With {.Id = 1, .Price = 13.40, .Genre = &amp;quot;Action&amp;quot;, .Director = &amp;quot;Eddie Jones&amp;quot;}}&lt;/p&gt;
&lt;p&gt;			Dim query1 = From i In items _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where i.Price &amp;gt; 9.99 _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By i.Price _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Select i&lt;/p&gt;
&lt;p&gt;			' load into new DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim table1 As DataTable = query1.CopyToDataTable()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' load into existing DataTable - schemas match &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;			Dim table2 As DataTable = New DataTable()&lt;/p&gt;
&lt;p&gt;			table2.Columns.Add(&amp;quot;Price&amp;quot;, GetType(Integer))&lt;/p&gt;
&lt;p&gt;			table2.Columns.Add(&amp;quot;Genre&amp;quot;, GetType(String))&lt;/p&gt;
&lt;p&gt;			Dim query2 = From i In items _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where i.Price &amp;gt; 9.99 _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By i.Price _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Select New With { i.Price, i.Genre }&lt;/p&gt;
&lt;p&gt;			query2.CopyToDataTable(table2, LoadOption.PreserveChanges)&lt;/p&gt;
&lt;p&gt;			' load into existing DataTable - expand schema + autogenerate new Id.&lt;/p&gt;
&lt;p&gt;			Dim table3 As DataTable = New DataTable()&lt;/p&gt;
&lt;p&gt;			Dim dc As DataColumn = table3.Columns.Add(&amp;quot;NewId&amp;quot;, GetType(Integer))&lt;/p&gt;
&lt;p&gt;			dc.AutoIncrement = True&lt;/p&gt;
&lt;p&gt;			table3.Columns.Add(&amp;quot;ExtraColumn&amp;quot;, GetType(String))&lt;/p&gt;
&lt;p&gt;			Dim query3 = From i In items _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where i.Price &amp;gt; 9.99 _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By i.Price _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Select New With { i.Price, i.Genre }&lt;/p&gt;
&lt;p&gt;			query3.CopyToDataTable(table3, LoadOption.PreserveChanges)&lt;/p&gt;
&lt;p&gt;			' load sequence of scalars.&lt;/p&gt;
&lt;p&gt;			Dim query4 = From i In items _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where i.Price &amp;gt; 9.99 _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Order By i.Price _&lt;/p&gt;
&lt;p&gt;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Select i.Price&lt;/p&gt;
&lt;p&gt;			Dim DataTable4 = query4.CopyToDataTable()&lt;/p&gt;
&lt;p&gt;		End Sub&lt;/p&gt;
&lt;p&gt;		Public Class Item&lt;/p&gt;
&lt;p&gt;			Private privateId As Integer&lt;/p&gt;
&lt;p&gt;			Public Property Id() As Integer&lt;/p&gt;
&lt;p&gt;				Get&lt;/p&gt;
&lt;p&gt;					Return privateId&lt;/p&gt;
&lt;p&gt;				End Get&lt;/p&gt;
&lt;p&gt;				Set(ByVal value As Integer)&lt;/p&gt;
&lt;p&gt;					privateId = value&lt;/p&gt;
&lt;p&gt;				End Set&lt;/p&gt;
&lt;p&gt;			End Property&lt;/p&gt;
&lt;p&gt;			Private privatePrice As Double&lt;/p&gt;
&lt;p&gt;			Public Property Price() As Double&lt;/p&gt;
&lt;p&gt;				Get&lt;/p&gt;
&lt;p&gt;					Return privatePrice&lt;/p&gt;
&lt;p&gt;				End Get&lt;/p&gt;
&lt;p&gt;				Set(ByVal value As Double)&lt;/p&gt;
&lt;p&gt;					privatePrice = value&lt;/p&gt;
&lt;p&gt;				End Set&lt;/p&gt;
&lt;p&gt;			End Property&lt;/p&gt;
&lt;p&gt;			Private privateGenre As String&lt;/p&gt;
&lt;p&gt;			Public Property Genre() As String&lt;/p&gt;
&lt;p&gt;				Get&lt;/p&gt;
&lt;p&gt;					Return privateGenre&lt;/p&gt;
&lt;p&gt;				End Get&lt;/p&gt;
&lt;p&gt;				Set(ByVal value As String)&lt;/p&gt;
&lt;p&gt;					privateGenre = value&lt;/p&gt;
&lt;p&gt;				End Set&lt;/p&gt;
&lt;p&gt;			End Property&lt;/p&gt;
&lt;p&gt;		End Class&lt;/p&gt;
&lt;p&gt;		Public Class Book&lt;/p&gt;
&lt;p&gt;			Inherits Item&lt;/p&gt;
&lt;p&gt;			Private privateAuthor As String&lt;/p&gt;
&lt;p&gt;			Public Property Author() As String&lt;/p&gt;
&lt;p&gt;				Get&lt;/p&gt;
&lt;p&gt;					Return privateAuthor&lt;/p&gt;
&lt;p&gt;				End Get&lt;/p&gt;
&lt;p&gt;				Set(ByVal value As String)&lt;/p&gt;
&lt;p&gt;					privateAuthor = value&lt;/p&gt;
&lt;p&gt;				End Set&lt;/p&gt;
&lt;p&gt;			End Property&lt;/p&gt;
&lt;p&gt;		End Class&lt;/p&gt;
&lt;p&gt;		Public Class Movie&lt;/p&gt;
&lt;p&gt;			Inherits Item&lt;/p&gt;
&lt;p&gt;			Private privateDirector As String&lt;/p&gt;
&lt;p&gt;			Public Property Director() As String&lt;/p&gt;
&lt;p&gt;				Get&lt;/p&gt;
&lt;p&gt;					Return privateDirector&lt;/p&gt;
&lt;p&gt;				End Get&lt;/p&gt;
&lt;p&gt;				Set(ByVal value As String)&lt;/p&gt;
&lt;p&gt;					privateDirector = value&lt;/p&gt;
&lt;p&gt;				End Set&lt;/p&gt;
&lt;p&gt;			End Property&lt;/p&gt;
&lt;p&gt;		End Class&lt;/p&gt;
&lt;p&gt;	End Class&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Module DataSetLinqOperators&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;System.Runtime.CompilerServices.Extension()&amp;gt; _&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Function CopyToDataTable(Of T)(ByVal source As IEnumerable(Of T)) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return New ObjectShredder(Of T)().Shred(source, Nothing, Nothing)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;System.Runtime.CompilerServices.Extension()&amp;gt; _&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Function CopyToDataTable(Of T)(ByVal source As IEnumerable(Of T), ByVal table As DataTable, ByVal options As Nullable(Of LoadOption)) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return New ObjectShredder(Of T)().Shred(source, table, options)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Module&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Class ObjectShredder(Of T)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Private _fi() As FieldInfo&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Private _pi() As PropertyInfo&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Private _ordinalMap As Dictionary(Of String, Integer)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Private _type As Type&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Sub New()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_type = GetType(T)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_fi = _type.GetFields()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_pi = _type.GetProperties()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_ordinalMap = New Dictionary(Of String, Integer)()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Function Shred(ByVal source As IEnumerable(Of T), ByVal table As DataTable, ByVal options As Nullable(Of LoadOption)) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If GetType(T).IsPrimitive Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return ShredPrimitive(source, table, options)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If table Is Nothing Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table = New DataTable(GetType(T).Name)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' now see if need to extend datatable base on the type T + build ordinal map&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table = ExtendTable(table, GetType(T))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.BeginLoadData()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Using e As IEnumerator(Of T) = source.GetEnumerator()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Do While e.MoveNext()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If options.HasValue Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.LoadDataRow(ShredObject(table, e.Current), CType(options, LoadOption))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Else&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.LoadDataRow(ShredObject(table, e.Current), True)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Loop&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Using&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.EndLoadData()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return table&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Function ShredPrimitive(ByVal source As IEnumerable(Of T), ByVal table As DataTable, ByVal options As Nullable(Of LoadOption)) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If table Is Nothing Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table = New DataTable(GetType(T).Name)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (Not table.Columns.Contains(&amp;quot;Value&amp;quot;)) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.Columns.Add(&amp;quot;Value&amp;quot;, GetType(T))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.BeginLoadData()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Using e As IEnumerator(Of T) = source.GetEnumerator()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim values() As Object = New Object(table.Columns.Count - 1) {}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Do While e.MoveNext()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;values(table.Columns(&amp;quot;Value&amp;quot;).Ordinal) = e.Current&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If options.HasValue Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.LoadDataRow(values, CType(options, LoadOption))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Else&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.LoadDataRow(values, True)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Loop&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Using&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;table.EndLoadData()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return table&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Function ExtendTable(ByVal table As DataTable, ByVal type As Type) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' value is type derived from T, may need to extend table.&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For Each f As FieldInfo In type.GetFields()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (Not _ordinalMap.ContainsKey(f.Name)) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim dc As DataColumn&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dc = If(table.Columns.Contains(f.Name), table.Columns(f.Name), table.Columns.Add(f.Name, f.FieldType))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_ordinalMap.Add(f.Name, dc.Ordinal)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Next f&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For Each p As PropertyInfo In type.GetProperties()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (Not _ordinalMap.ContainsKey(p.Name)) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim dc As DataColumn&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dc = If(table.Columns.Contains(p.Name), table.Columns(p.Name), table.Columns.Add(p.Name, p.PropertyType))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_ordinalMap.Add(p.Name, dc.Ordinal)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Next p&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return table&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Function ShredObject(ByVal table As DataTable, ByVal instance As T) As Object()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim fi() As FieldInfo = _fi&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim pi() As PropertyInfo = _pi&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If instance.GetType() IsNot GetType(T) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExtendTable(table, instance.GetType())&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fi = instance.GetType().GetFields()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pi = instance.GetType().GetProperties()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim values() As Object = New Object(table.Columns.Count - 1) {}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For Each f As FieldInfo In fi&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;values(_ordinalMap(f.Name)) = f.GetValue(instance)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Next f&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For Each p As PropertyInfo In pi&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;values(_ordinalMap(p.Name)) = p.GetValue(instance, Nothing)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Next p&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return values&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Function&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Class&lt;/p&gt;
&lt;p&gt;End Namespace&lt;/p&gt;</description></item><item><title>re: Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7114730</link><pubDate>Tue, 15 Jan 2008 05:45:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7114730</guid><dc:creator>Fabrice</dc:creator><description>&lt;p&gt;We have a VB version of this source code in the samples' source code of the LINQ in Action book (&lt;a rel="nofollow" target="_new" href="http://LinqInAction.net"&gt;http://LinqInAction.net&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Here is the complete archive: &lt;a rel="nofollow" target="_new" href="http://linqinaction.net/files/folders/linqinaction/entry1952.aspx"&gt;http://linqinaction.net/files/folders/linqinaction/entry1952.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;See the files DataSetLinqOperators.vb and ObjectShreder.vb in Chapter14.VB\Chapter14.&lt;/p&gt;
&lt;p&gt;Note: In our version, we kept the original names of the query operators for clarity (ToDataTable and LoadSequence).&lt;/p&gt;</description></item><item><title>re: Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7181681</link><pubDate>Mon, 21 Jan 2008 11:58:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7181681</guid><dc:creator>Walther</dc:creator><description>&lt;p&gt;Anyone found about about the nullable problem in the VB version yet?&lt;/p&gt;
&lt;p&gt;When a nullable column is added in this line:&lt;/p&gt;
&lt;p&gt;Dim dc As DataColumn = If(table.Columns.Contains(p.Name), table.Columns(p.Name), table.Columns.Add(p.Name, p.PropertyType))&lt;/p&gt;
&lt;p&gt;a NotSupportedException is thrown: &lt;/p&gt;
&lt;p&gt;DataSet does not support System.Nullable&amp;lt;&amp;gt;.&lt;/p&gt;
&lt;p&gt;Fabrice's implementation suffers the same problem.&lt;/p&gt;</description></item><item><title>re: Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7181903</link><pubDate>Mon, 21 Jan 2008 12:31:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7181903</guid><dc:creator>Walther</dc:creator><description>&lt;p&gt;VB implementation to handle nullable types as well :&lt;/p&gt;
&lt;p&gt;Public Function ExtendTable(ByVal table As DataTable, ByVal type As Type) As DataTable&lt;/p&gt;
&lt;p&gt; &amp;nbsp;For Each f As FieldInfo In type.GetFields()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;If (Not _ordinalMap.ContainsKey(f.Name)) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim dc As DataColumn&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;dc = If(table.Columns.Contains(f.Name), table.Columns(f.Name), table.Columns.Add(f.Name, f.FieldType))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;_ordinalMap.Add(f.Name, dc.Ordinal)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Next f&lt;/p&gt;
&lt;p&gt; &amp;nbsp;For Each p As PropertyInfo In type.GetProperties()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;If Not _ordinalMap.ContainsKey(p.Name) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim colType As Type = p.PropertyType&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (colType.IsGenericType) AndAlso (colType.GetGenericTypeDefinition() Is GetType(Nullable(Of ))) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;colType = colType.GetGenericArguments()(0)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim dc As DataColumn = IIf(table.Columns.Contains(p.Name), table.Columns(p.Name), table.Columns.Add(p.Name, colType))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;_ordinalMap.Add(p.Name, dc.Ordinal)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Next&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Return table&lt;/p&gt;
&lt;p&gt;End Function&lt;/p&gt;</description></item><item><title>re: Pathetic Plea for help</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#7715801</link><pubDate>Fri, 15 Feb 2008 16:45:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7715801</guid><dc:creator>hmmm</dc:creator><description>&lt;p&gt;a small problem guys...this function does not set the primarykey on the datatable.&lt;/p&gt;
&lt;p&gt;which is needed in case you wish to update the table using an sqlcommand.&lt;/p&gt;
&lt;p&gt;has anyone been able to get this to work?&lt;/p&gt;</description></item><item><title>CopyToDataTable</title><link>http://blogs.msdn.com/aconrad/archive/2008/01/11/pathetic-plea-for-help.aspx#9000692</link><pubDate>Wed, 15 Oct 2008 18:23:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9000692</guid><dc:creator>罗爱军</dc:creator><description>&lt;p&gt;IntheoriginalLinqCTPandthefirstOrcasBeta,weincludedaDataSetspecificLinqoperatorcall...&lt;/p&gt;
</description></item></channel></rss>