Genel Alan ve SetField Yöntemleri (LINQ to DataSet)

LINQ to DataSet, sınıfına sütun değerlerine DataRow erişmek için uzantı yöntemleri sağlar: Field yöntemi ve SetField yöntemi. Bu yöntemler, özellikle null değerlerle ilgili olarak geliştiriciler için sütun değerlerine daha kolay erişim sağlar. null DataSet değerleri temsil etmek için kullanılırken DBNull.Value LINQ ve Nullable<T> türlerini kullanırNullable. içinde DataRow önceden var olan sütun erişimcisini kullanmak için dönüş nesnesini uygun türe dönüştürmeniz gerekir. içindeki DataRow belirli bir alan null olabilirse, bir null değerin döndürülerek DBNull.Value başka bir türe örtük olarak atanması bir InvalidCastExceptionoluşturacağından, null değeri açıkça denetlemeniz gerekir. Aşağıdaki örnekte, DataRow.IsNull yöntemi null değeri denetlemek için kullanılmadıysa, dizin oluşturucu döndürülürse DBNull.Value ve bunu bir öğesine dönüştürmeyi denerse bir Stringözel durum oluşturulur.

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

yöntemi, Field sütun DataRow değerlerine erişim sağlar ve SetField içindeki sütun değerlerini DataRowayarlar. Field Hem yöntem hem SetField de yöntem null değer türlerini işler, bu nedenle önceki örnekte olduğu gibi null değerleri açıkça denetlemeniz gerekmez. Her iki yöntem de genel yöntemlerdir, bu nedenle dönüş türünü atamanız gerekmez.

Aşağıdaki örnek yöntemini Field kullanır.

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

yönteminin ve yönteminin SetField genel parametresinde T Field belirtilen veri türünün temel alınan değerin türüyle eşleşmesi gerektiğini unutmayın. Aksi takdirde, bir InvalidCastException özel durum oluşturulur. Belirtilen sütun adı, içindeki bir sütunun adıyla DataSetda eşleşmelidir, aksi takdirde bir ArgumentException oluşturulur. Her iki durumda da, sorgu yürütülürken verilerin sabit listesi sırasında çalışma zamanında özel durum oluşturulur.

Yöntemin SetField kendisi herhangi bir tür dönüştürmesi gerçekleştirmez. Ancak bu, tür dönüştürmenin gerçekleşeceği anlamına gelmez. yöntemi sınıfının SetField ADO.NET davranışını DataRow kullanıma sunar. Nesne tarafından DataRow bir tür dönüştürmesi gerçekleştirilebilir ve dönüştürülen değer nesneye DataRow kaydedilir.

Ayrıca bkz.