Generische Field- und SetField-Methoden (LINQ to DataSet)Generic Field and SetField Methods (LINQ to DataSet)

LINQ to DataSet stellt DataRow Erweiterungsmethoden für die Field Klasse für SetField den Zugriff auf Spaltenwerte bereit: die Methode und die Methode.LINQ to DataSet provides extension methods to the DataRow class for accessing column values: the Field method and the SetField method. Diese Methoden erleichtern Entwicklern den Zugriff auf Spaltenwerte, besonders hinsichtlich der NULL-Werte.These methods provide easier access to column values for developers, especially regarding null values. Die DataSet DBNull.Value verwendet, um NULL-Werte darzustellen, Nullable Nullable<T> während LINQ die und-Typen verwendet.The DataSet uses DBNull.Value to represent null values, whereas LINQ uses the Nullable and Nullable<T> types. Wenn Sie den bereits DataRow vorhandenen Spaltenaccessor in verwenden, müssen Sie das Rückgabeobjekt in den entsprechenden Typ umwerfen.Using the pre-existing column accessor in DataRow requires you to cast the return object to the appropriate type. Wenn ein bestimmtes DataRow Feld in einem NULL sein kann, müssen DBNull.Value Sie explizit nach einem NULL-Wert suchen, da das Zurückgeben und implizite Umsetzen in einen anderen Typ eine InvalidCastExceptionauslöst.If a particular field in a DataRow can be null, you must explicitly check for a null value because returning DBNull.Value and implicitly casting it to another type throws an InvalidCastException. Wenn die DataRow.IsNull Methode im folgenden Beispiel nicht zum Überprüfen nach einem NULL-Wert verwendet DBNull.Value wurde, wird eine StringAusnahme ausgelöst, wenn der Indexer zurückgegeben und versucht hat, sie in einen zu setzen.In the following example, if the DataRow.IsNull method was not used to check for a null value, an exception would be thrown if the indexer returned DBNull.Value and tried to cast it to a String.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables["Product"];

var query =
    from product in products.AsEnumerable()
    where !product.IsNull("Color") &&
        (string)product["Color"] == "Red"
    select new
    {
        Name = product["Name"],
        ProductNumber = product["ProductNumber"],
        ListPrice = product["ListPrice"]
    };

foreach (var product in query)
{
    Console.WriteLine("Name: {0}", product.Name);
    Console.WriteLine("Product number: {0}", product.ProductNumber);
    Console.WriteLine("List price: ${0}", product.ListPrice);
    Console.WriteLine("");
}
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)

Dim products As DataTable = ds.Tables("Product")

Dim query = _
    From product In products.AsEnumerable() _
    Where product!Color IsNot DBNull.Value AndAlso product!Color = "Red" _
    Select New With _
       { _
           .Name = product!Name, _
           .ProductNumber = product!ProductNumber, _
           .ListPrice = product!ListPrice _
       }

For Each product In query
    Console.WriteLine("Name: " & product.Name)
    Console.WriteLine("Product number: " & product.ProductNumber)
    Console.WriteLine("List price: $" & product.ListPrice & vbNewLine)
Next

Die Field-Methode bietet Zugriff auf die Spaltenwerte einer DataRow, und die SetField-Methode gibt Spaltenwerte in einer DataRow an.The Field method provides access to the column values of a DataRow and the SetField sets column values in a DataRow. Sowohl Field die SetField Methode als auch die Methode behandeln nullfähige Werttypen, sodass Sie nicht wie im vorherigen Beispiel explizit nach NULL-Werten suchen müssen.Both the Field method and SetField method handle nullable value types, so you do not have to explicitly check for null values as in the previous example. Beide Methoden sind darüber hinaus generische Methoden. Der Rückgabetyp muss also nicht konvertiert werden.Both methods are generic methods, also, so you do not have to cast the return type.

Im folgenden Beispiel wird die Field-Methode verwendet:The following example uses the Field method.

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables["Product"];

var query =
    from product in products.AsEnumerable()
    where product.Field<string>("Color") == "Red"
    select new
    {
        Name = product.Field<string>("Name"),
        ProductNumber = product.Field<string>("ProductNumber"),
        ListPrice = product.Field<Decimal>("ListPrice")
    };

foreach (var product in query)
{
    Console.WriteLine("Name: {0}", product.Name);
    Console.WriteLine("Product number: {0}", product.ProductNumber);
    Console.WriteLine("List price: ${0}", product.ListPrice);
    Console.WriteLine("");
}
' Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
' See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)

Dim products As DataTable = ds.Tables("Product")

Dim query = _
    From product In products.AsEnumerable() _
    Where product.Field(Of String)("Color") = "Red" _
    Select New With _
       { _
           .Name = product.Field(Of String)("Name"), _
           .ProductNumber = product.Field(Of String)("ProductNumber"), _
           .ListPrice = product.Field(Of Decimal)("ListPrice") _
       }

For Each product In query
    Console.WriteLine("Name: " & product.Name)
    Console.WriteLine("Product number: " & product.ProductNumber)
    Console.WriteLine("List price: $ " & product.ListPrice & vbNewLine)
Next

Beachten Sie, dass der im generischen Parameter T der Methoden Field und SetField angegebene Datentyp mit dem Typ des zugrunde liegenden Werts übereinstimmen muss.Note that the data type specified in the generic parameter T of the Field method and the SetField method must match the type of the underlying value. Anderenfalls wird eine InvalidCastException ausgelöst.Otherwise, an InvalidCastException exception will be thrown. Der angegebene Spaltenname muss außerdem mit dem Namen einer DataSet-Spalte übereinstimmen. Wenn dies nicht der Fall ist, wird eine ArgumentException ausgelöst.The specified column name must also match the name of a column in the DataSet, or an ArgumentException will be thrown. In beiden Fällen wird die Ausnahme bei der Datenenumeration zur Laufzeit ausgelöst, wenn die Abfrage ausgeführt wird.In both cases, the exception is thrown at run time during the enumeration of the data when the query is executed.

Die SetField-Methode selbst führt keine Typkonvertierungen aus.The SetField method itself does not perform any type conversions. Dies bedeutet jedoch nicht, dass keinerlei Typkonvertierung auftritt.This does not mean, however, that a type conversion will not occur. Die SetField Methode macht das ADO.NET DataRow Verhalten der Klasse verfügbar.The SetField method exposes the ADO.NET behavior of the DataRow class. Eine Typkonvertierung kann vom DataRow Objekt durchgeführt werden, und der DataRow konvertierte Wert wird dann im Objekt gespeichert.A type conversion could be performed by the DataRow object and the converted value would then be saved to the DataRow object.

Siehe auchSee also