Genellikle vermek LINQ hazır bir nesne olarak bir LINQ nesnesini işlemek gerektiğinde kendim uzantı yöntemleri. Örneğin, DataRowCollection (DataTowCollection) (DataTable.Rows özelliği) üzerinde, muhtemelen bir DataRows listesinden başka bir şey için kullanmadığınız bir sorguyu araştırmak istiyorsunuz. Bu dönüşümü sizin için yapan bir uzantı yöntemi yapardım (DataRowCollection - List<DataRow>
). Ayrıca, bir sebepten dolayı sütun için geçersiz bir anahtar adı verilirse, bir istisna atmayı umursamadığımda değerleri güvenli bir şekilde almak için genellikle bir uzantı yöntemi kullanırım. Daha sonra, bir ints listesi olarak kimliklerini ve kimliğini içeren bir alan adını içeren bir uzantı yöntemi yaratabilirsiniz. Hepsi söylenip yapıldığında, bu bir kod satırı ile yapılır. İşte tüm uzatma yöntemlerinizi içeren sınıf. Tek bir yöntem çağrısı:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication11
{
public static class SystemDataHelpers
{
public static List<DataRow> RowList(this DataTable table)
{
List<DataRow> list = new List<DataRow>();
foreach (DataRow row in table.Rows)
list.Add(row);
return list;
}
public static object GetItem(this DataRow row, string field)
{
if (!row.Table.Columns.Contains(field))
return null;
return row[field];
}
public static List<DataRow> GetRows(this DataTable table, List<int> ids, string fieldName)
{
Func<DataRow, bool> filter = row => ids.Contains((int)row.GetItem(fieldName));
return table.RowList().Where(filter).ToList();
}
}
}
(... Zaten bunları var yapmanız gereken olmaz) sizin değişkenleri ayarlamak yerine Ardından diğer, asıl çalışma bir satır kod (DÜZENLEME ile yapılır): bir datatable dönüştürmek
DataTable table = new DataTable();
List<int> rowIds = new List<int> { 1, 2, 3, 4 };
string idFieldName = "row_id";
List<DataRow> selected = table.GetRows(rowIds, idFieldName);
bir yolu .CopyToDataTable() kullanmaktır, bu durumda matchingRows.Any()() matchingRows.CopyToDataTable yapmadan önce gerçek dönerse mutlaka kontrol edin. Bu, System.Data.DataTableExtensions gerektirir – Enrico