(LINQ / Predicate) का उपयोग करके स्ट्रिंग सरणी में किसी DataTable के सभी स्तंभ नाम प्राप्त करें


107

मुझे पता है कि हम इसे एक सरल लूप द्वारा आसानी से कर सकते हैं, लेकिन मैं इस LINQ / भविष्यवाणी को जारी रखना चाहता हूं।

string[] columnNames = dt.Columns.?

or

string[] columnNames = from DataColumn dc in dt.Columns select dc.name;

जवाबों:


220

इसे आज़माएं (LINQ method syntax):

string[] columnNames = dt.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .ToArray();  

या LINQ क्वेरी सिंटैक्स में:

string[] columnNames = (from dc in dt.Columns.Cast<DataColumn>()
                        select dc.ColumnName).ToArray();

Castआवश्यक है, क्योंकि स्तंभ प्रकार DataColumnCollection का है IEnumerable, जो कि एक है , नहीं IEnumerable<DataColumn>। अन्य भागों को स्पष्ट होना चाहिए।


मैं linq / lamda ex में नौसिखिया हूं। यह अच्छा लग रहा है। एक और सवाल, मैं कैसे कंडोम (जहां dc.CumnyName! = "ABC") को 1 लैम्डा अभिव्यक्ति में रख सकता हूं। linq में मैं कहाँ का उपयोग कर सकते हैं।
ललित

बस इस तरह: string[] columnNames = dt.Columns.Cast<DataColumn>().Where(x => x.ColumnName != "ABC").Select(x => x.ColumnName).ToArray();
डैनियल हिलगर्थ

1
@Tizz: कृपया इसे एक नए प्रश्न के रूप में पोस्ट करें और अपने कोड का विवरण शामिल करें। लेकिन अनिवार्य रूप से: एक DataGrid एक DataTable के समान नहीं है।
डैनियल हिलगार्थ

3
@ फिकर: कुछ सोच अभी भी एक डेवलपर के रूप में आवश्यक है। आपके पास दिमाग है। इसका इस्तेमाल करें।
डैनियल हिल्गारथ

1
ठीक है। सिर्फ वोटों को देखते हैं। जाहिर है, समस्या आपके साथ है, कोड के साथ नहीं। कहीं और ट्रोल करें
डैनियल हिल्गारथ

17

उपयोग

var arrayNames = (from DataColumn x in dt.Columns
                  select x.ColumnName).ToArray();

1
मेरे अंत में, यह दो अपवाद फेंकता है: DataColumnCollection से EnumerableRowCollection में परिवर्तित नहीं हो सकता है और DataColumnCollection में Cast के लिए परिभाषा नहीं है।

4
@ मुझे लगता है कि आप 'System.Linq;' अपने usings के लिए। मैंने अभी-अभी अपने कोड का परीक्षण किया है और आपको 'System.Linq; वहाँ नहीं है।
सेम वेनमेन जुले

रवींद्र! आप काफी सही हैं; अजीब बात है, यह usingकथन स्वतः ही इतनी बार जुड़ जाता है, इसकी जांच के लिए मेरे साथ ऐसा कभी नहीं हुआ।

4

मैं ऐसे विस्तार विधि का उपयोग करने का सुझाव दूंगा:

public static class DataColumnCollectionExtensions
{
    public static IEnumerable<DataColumn> AsEnumerable(this DataColumnCollection source)
    {
        return source.Cast<DataColumn>();
    }
}

और इसीलिए:

string[] columnNames = dataTable.Columns.AsEnumerable().Select(column => column.Name).ToArray();

आप DataTableकोड को कम करने के लिए कक्षा के लिए एक और एक्सटेंशन विधि भी लागू कर सकते हैं :

public static class DataTableExtensions
{
    public static IEnumerable<DataColumn> GetColumns(this DataTable source)
    {
        return source.Columns.AsEnumerable();
    }
}

और इसे निम्नानुसार उपयोग करें:

string[] columnNames = dataTable.GetColumns().Select(column => column.Name).ToArray();

0
List<String> lsColumns = new List<string>();

if(dt.Rows.Count>0)
{
    var count = dt.Rows[0].Table.Columns.Count;

    for (int i = 0; i < count;i++ )
    {
        lsColumns.Add(Convert.ToString(dt.Rows[0][i]));
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.