2009-08-08 14 views
7

मैं तार सरणी (json रिसीवर के लिए) में की तरह उपयोगकर्ता की संपत्तियों की एक सूची कन्वर्ट करने के लिए करना चाहते हैं:स्ट्रिंग सरणी के रूप में linq परिणाम कैसे प्राप्त करें?

List<User> users = <..list of users from db...> 

var jsonData = (
    from user in users 
    select new { user.Id, user.Person.Lastname, user.Person.Firstname }); 

return Json(jsonData) 

परिणाम एक सरणी नामित क्षेत्रों

[{"Id":1,"Lastname":"Doe","Firstname":"John"},{"Id":2,"Lastname":"Smith","Firstname":"Adam"},...] 

है लेकिन मैं इसे होना चाहते हैं सादे तारों के सरणी की सरणी जैसे:

[["1","Doe","John"] 
["2","Smith","Adam"], ...] 

linq परिणाम स्ट्रिंग सरणी में कैसे डाला जाए?

उत्तर

17
var jsonData = from user in users 
       select new[] { user.Id.ToString(), 
           user.Person.Lastname, 
           user.Person.Firstname }; 

वैकल्पिक रूप से, आप लैम्ब्डा सिंटैक्स का उपयोग कर सकते हैं:

var jsonData = users.Select(user => new[] { user.Id.ToString(), 
              user.Person.Lastname, 
              user.Person.Firstname }); 
+0

धन्यवाद, आपके प्रस्ताव दोनों अच्छी तरह से काम करते हैं :) वैसे भी, मैं पहले इस तरह के एक स्ट्रिंग सरणी कास्ट करने की कोशिश कर रहा था, लेकिन कुछ अजीब इंडेक्स त्रुटियों के साथ समाप्त हुआ। आपके कोड के साथ ही था, तब मुझे एहसास हुआ कि मेरा डेटा स्रोत IQueryable ऑब्जेक्ट लौटा रहा था जो समस्या थी - उपयोगकर्ता। सूची() ने इसे हल किया। वैसे भी, आपका उत्तर यह प्राप्त करने में सहायक था। धन्यवाद। – twk

+0

एफवाईआई, यह सटीक समाधान मेरे लिए काम नहीं करता क्योंकि मेरे पास संख्यात्मक प्रकार मिश्रित थे। (मुझे यह कहते हुए एक त्रुटि मिली कि संकलक सरणी के प्रकार को निर्धारित नहीं कर सका।) लेकिन मैंने "नई वस्तु []" और यह मेरी समस्या हल हो गई। – mpontillo

+0

@ माइक: हां, यही कारण है कि मैंने 'user.Id 'पर '.ToString()' कहा है जिसे मैं एक पूर्णांक मानता हूं। काम करने के लिए 'नया []' के लिए, संकलक इसे पारित वस्तुओं से सरणी के प्रकार का अनुमान लगाने में सक्षम होना चाहिए। यदि उनके प्रकार संगत नहीं हैं, तो संकलक शिकायत करने जा रहा है। –

0

मैं एक List<> मूल्यों की एक सरणी, नहीं बनाने का प्रारंभिक बिंदु के रूप में एक IQueryable उपयोग कर रहा था, लेकिन दोनों ही मामलों में serialise कर सकते हैं एक स्ट्रिंग सरणी के बजाय एक अज्ञात ऑब्जेक्ट सरणी, स्ट्रिंग्स पर मूल्य डाले बिना एक ही परिणाम प्राप्त करने के लिए।

उदा।

var jsonData = users.Select(user => new object[] { 
        user.Id, 
        user.Person.Lastname, 
        user.Person.Firstname 
       }); 

मेरे उदाहरण में मैं भी, jQuery dataTable साथ परिणाम क्लाइंट साइड उपयोग कर रहा था तो परिणाम (संपत्ति नाम aadata के साथ) एक और गुमनाम वस्तु में लिपटे की जरूरत है।

उदा।

return Json(new { aaData = jsonData }, JsonRequestbehavior.AllowGet); 

उम्मीद है कि यह अन्य लोगों कि इस सवाल का इस समस्या से dataTable विशेष संस्करण की तलाश में खोजने में मदद मिलेगी (के रूप में मैं था)।

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

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