LINQ

2010-04-01 8 views
16

में एक बहु-आयामी सरणी का चयन करना मेरे पास एक कार्य है जहां मुझे डेटाटेबल को दो-आयामी सरणी में अनुवाद करने की आवश्यकता है। पंक्तियों और स्तंभों पर बस लूपिंग करना इतना आसान है (नीचे उदाहरण देखें)।LINQ

private static string[,] ToArray(DataTable table) 
{ 
    var array = new string[table.Rows.Count,table.Columns.Count]; 

    for (int i = 0; i < table.Rows.Count; ++i) 
     for (int j = 0; j < table.Columns.Count; ++j) 
      array[i, j] = table.Rows[i][j].ToString(); 

    return array; 
} 

जो मैं वास्तव में करना चाहता हूं वह उस 2 डी सरणी को उत्पन्न करने के लिए LINQ में एक चयन कथन का उपयोग करना है। दुर्भाग्यवश ऐसा लगता है कि एक बहुआयामी सरणी का चयन करने के लिए LINQ में कोई रास्ता नहीं है। हां, मुझे पता है कि मैं एक jagged सरणी का चयन करने के लिए LINQ का उपयोग कर सकते हैं, लेकिन यह वही नहीं है जो मैं चाहता हूं।

क्या मेरी धारणा सही है, या क्या बहु-आयामी सरणी का चयन करने के लिए LINQ का उपयोग करने का कोई तरीका है?

+0

क्या आप इसके बजाय सरणी की सरणी कर सकते हैं? (यह कन्वर्ट करने के लिए तेज़ होगा) –

+0

हां, मैं एक जंजीर सरणी (सरणी सरणी) कर सकता हूं, लेकिन दुर्भाग्यवश इस मामले में ऐसा नहीं है कि मैं जिस एपीआई को फोन कर रहा था वह स्वीकार नहीं करेगा। – mckhendry

उत्तर

15

मुझे नहीं लगता कि यह संभव है।

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source, 
    Func<TSource, TResult> selector 
) 

एक आयताकार सरणी किसी भी टी के लिए IEnumerable<T> को लागू नहीं करता है तो यह नहीं हो सकता: मेरा तर्क Select और अधिकांश अन्य LINQ कार्यों की आवश्यकता है कि जो संग्रह वे पर काम कुछ टी के लिए लागू कम से कम IEnumerable<T> है एक चयन समारोह का वापसी मूल्य।

+2

हां, LINQ का उपयोग करके एक जंजीर सरणी प्राप्त करना मुश्किल है, लेकिन एक वास्तविक 2 डी सरणी पूरी तरह से कुछ और है। –

संबंधित मुद्दे

 संबंधित मुद्दे