मैं आमतौर पर देना जब मैं एक पूर्व-LINQ ऑब्जेक्ट को LINQ- तैयार ऑब्जेक्ट के रूप में इलाज करने की आवश्यकता होती हूं तो स्वयं विस्तार विधियां। उदाहरण के लिए, आप DataRowCollection (DataTable.Rows प्रॉपर्टी) पर क्वेरी करना चाहते हैं, जिसे आप शायद DataRows की सूची से अधिक कुछ भी नहीं कर रहे हैं। मैं एक विस्तार विधि बनाउंगा जो आपके लिए यह परिवर्तन करता है (DataRowCollection से List<DataRow>
)। मैं आमतौर पर मूल्यों को सुरक्षित रूप से प्राप्त करने के लिए एक विस्तार विधि का उपयोग करता हूं, जब मुझे किसी अपवाद को फेंकने की परवाह नहीं होती है, तो किसी कारण से कॉलम के लिए अमान्य कुंजी नाम प्रदान किया जाता है। फिर, आप एक विस्तार विधि बना सकते हैं जो इन्ट्स की एक सूची आईडी के रूप में लेती है और एक फ़ील्ड नाम जिसमें आईडी आप चाहते हैं उसे वापस करने के लिए। जब सब कुछ कहा और किया जाता है, यह कोड की एक पंक्ति के साथ किया जाता है। यहां आपके सभी एक्सटेंशन विधियों के साथ कक्षा है। एक भी विधि कॉल:
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();
}
}
}
फिर, अपने चर की स्थापना के अलावा अन्य (जो आप करने की ज़रूरत नहीं है ... आप पहले से मौजूद हैं), वास्तविक काम कोड की एक पंक्ति (संपादित साथ किया जाता है):
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);
एक तरह से एक datatable में बदलने के लिए .CopyToDataTable() का उपयोग करना है, इस मामले में अगर matchingRows.Any() matchingRows.CopyToDataTable करने से पहले सच रिटर्न() जांच करना न भूलें। इसके लिए System.Data.DataTableExtensions की आवश्यकता है – Enrico