Delen via


Algemene veld- en SetField-methoden (LINQ naar DataSet)

LINQ naar DataSet biedt uitbreidingsmethoden voor de DataRow klasse voor het openen van kolomwaarden: de Field methode en de SetField methode. Deze methoden bieden eenvoudiger toegang tot kolomwaarden voor ontwikkelaars, met name met betrekking tot null-waarden. De DataSet toepassingen DBNull.Value om null-waarden weer te geven, terwijl LINQ de Nullable en Nullable<T> typen gebruikt. Als u de bestaande kolomtoegangsfunctie gebruikt, DataRow moet u het retourobject naar het juiste type casten. Als een bepaald veld in een DataRow null-waarde kan zijn, moet u expliciet controleren op een null-waarde omdat het wordt geretourneerd DBNull.Value en impliciet naar een ander type wordt InvalidCastExceptiongegooid. In het volgende voorbeeld, als de DataRow.IsNull methode niet is gebruikt om te controleren op een null-waarde, wordt er een uitzondering gegenereerd als de indexeerfunctie deze heeft geretourneerd DBNull.Value en geprobeerd om deze te casten naar een 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

De Field methode biedt toegang tot de kolomwaarden van een DataRow en de SetField sets kolomwaarden in een DataRow. Zowel de methode als SetField de Field methode verwerken null-waardetypen, dus u hoeft niet expliciet te controleren op null-waarden zoals in het vorige voorbeeld. Beide methoden zijn algemene methoden, ook, dus u hoeft het retourtype niet te casten.

In het volgende voorbeeld wordt de Field methode gebruikt.

// 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

Het gegevenstype dat is opgegeven in de algemene parameter T van de Field methode en de SetField methode moet overeenkomen met het type onderliggende waarde. Anders wordt er een InvalidCastException uitzondering gegenereerd. De opgegeven kolomnaam moet ook overeenkomen met de naam van een kolom in de DataSetkolom of er wordt een ArgumentException gegenereerd. In beide gevallen wordt de uitzondering tijdens runtime gegenereerd tijdens de inventarisatie van de gegevens wanneer de query wordt uitgevoerd.

De SetField methode zelf voert geen typeconversies uit. Dit betekent echter niet dat er geen typeconversie plaatsvindt. Met SetField de methode wordt het ADO.NET gedrag van de DataRow klasse weergegeven. Een typeconversie kan worden uitgevoerd door het DataRow object en de geconverteerde waarde wordt vervolgens opgeslagen in het DataRow object.

Zie ook