DataRow
FieldThe Field method on DataRow
accesses a field. It is an extension method. It is found in the System.Data
namespace.
Field()
is a generic method—this means it returns typed data. It makes field access easier. We can avoid complicated casting expressions and exception handling.
DataTable
can be enumerated
with the foreach
-loop. Accessing the fields themselves is somewhat more complicated. The fields can have different types.
DataTable
in the example has cells with types of int
, string
and DateTime
.foreach
-loop. In the statement list it assigns variables to the results of the Field extension method.using System; using System.Data; class Program { static void Main() { // // Loop over DataTable rows and call the Field extension method. // foreach (DataRow row in GetTable().Rows) { // Get first field by column index. int weight = row.Field<int>(0); // Get second field by column name. string name = row.Field<string>("Name"); // Get third field by column index. string code = row.Field<string>(2); // Get fourth field by column name. DateTime date = row.Field<DateTime>("Date"); // Display the fields. Console.WriteLine("{0} {1} {2} {3}", weight, name, code, date); } } static DataTable GetTable() { DataTable table = new DataTable(); // Create DataTable table.Columns.Add("Weight", typeof(int)); // Add four columns table.Columns.Add("Name", typeof(string)); table.Columns.Add("Code", typeof(string)); table.Columns.Add("Date", typeof(DateTime)); table.Rows.Add(57, "Koko", "A", DateTime.Now); // Add five rows table.Rows.Add(130, "Fido", "B", DateTime.Now); table.Rows.Add(92, "Alex", "C", DateTime.Now); table.Rows.Add(25, "Charles", "D", DateTime.Now); table.Rows.Add(7, "Candy", "E", DateTime.Now); return table; } }57 Koko A 7/14/2009 6:20:48 AM 130 Fido B 7/14/2009 6:20:48 AM 92 Alex C 7/14/2009 6:20:48 AM 25 Charles D 7/14/2009 6:20:48 AM 7 Candy E 7/14/2009 6:20:48 AM
There are 2 parameter lists on each method invocation to Field. The first parameter to the method is enclosed in the brackets. This is called a type parameter.
int
or string
) you want the method to cast the result to.How does Field()
work internally? The DataRowExtensions
class
is an extension method class
located in the System.Data.DataSetExtensions.dll file.
class
, the metadata loader will store this additional DLL in memory.Field()
will internally invoke a generic method that validates the parameter. It then uses a generic method to unbox the object.We looked at the Field extension method found in the System.Data
namespace and the DataSetExtensions
class
. We cast the cells in a DataTable
by a column identifier.