Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
LINQ to DataSet fournit des méthodes d’extension à la DataRow classe pour accéder aux valeurs de colonne : la Field méthode et la SetField méthode. Ces méthodes permettent d’accéder plus facilement aux valeurs de colonne pour les développeurs, en particulier en ce qui concerne les valeurs Null. DataSet utilise DBNull.Value pour représenter des valeurs null, tandis que LINQ utilise les types Nullable et Nullable<T>. Pour pouvoir utiliser l’accesseur de colonne existant dans DataRow, vous devez effectuer un cast de l’objet retourné vers le type approprié. Si un champ particulier d’un DataRow peut avoir la valeur Null, vous devez vérifier explicitement si une valeur est Null, car le fait de retourner une DBNull.Value et d’effectuer implicitement un cast vers un autre type lève une InvalidCastException. Dans l’exemple suivant, si la méthode DataRow.IsNull n’a pas été utilisée pour vérifier une valeur null, une exception serait levée si l’indexeur retourne DBNull.Value et essaie de le convertir en 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: {product.Name}");
Console.WriteLine($"Product number: {product.ProductNumber}");
Console.WriteLine($"List price: ${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
La Field méthode fournit l’accès aux valeurs de colonne d’un DataRow et définit les SetField valeurs de colonne dans un DataRow. Les méthodes Field et SetField gèrent les types de valeurs nullables, vous n'avez donc pas besoin de vérifier explicitement les valeurs null comme dans l'exemple précédent. Les deux méthodes sont également des méthodes génériques. Vous n’avez donc pas besoin de caster le type de retour.
L’exemple suivant utilise la Field méthode.
// 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: {product.Name}");
Console.WriteLine($"Product number: {product.ProductNumber}");
Console.WriteLine($"List price: ${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
Notez que le type de données spécifié dans le paramètre T générique de la Field méthode et la SetField méthode doivent correspondre au type de la valeur sous-jacente. sinon une exception InvalidCastException est levée. Le nom de la colonne spécifiée doit également correspondre à celui de la colonne dans le DataSet, sinon une ArgumentException est levée. Dans les deux cas, l’exception est levée au moment de l’exécution pendant l’énumération des données lorsque la requête est exécutée.
La SetField méthode elle-même n’effectue aucune conversion de type. Cela ne signifie toutefois pas qu’une conversion de type ne se produit pas. La SetField méthode expose le comportement ADO.NET de la DataRow classe. Une conversion de type peut être effectuée par l’objet DataRow et la valeur convertie est ensuite enregistrée dans l’objet DataRow .