Linq

2009-11-09 17 views
18

का उपयोग कर एक और की सूची में से एक ऑब्जेक्ट प्रकार की एक सूची बनाएं अगर मैं टाइप ए की कक्षाओं और बी है:Linq

public class A 
{ 
    public int TotalCount; 
    public string Title; 
} 

public class B 
{ 
    public int Count; 
    public string Title; 
} 

मैं उदाहरणों एक उदाहरणों की एक सूची है, के लिए सबसे कारगर तरीका क्या है लिंक का उपयोग कर प्रकार बी की एक सूची बनाएं और पॉप्युलेट करें?

+0

आपका प्रश्न अस्पष्ट है ... ए और बी के बीच संबंध क्या है? –

+0

अनिवार्य रूप से वे एक ही चीज़ का प्रतिनिधित्व करते हैं। मेरे वास्तविक मामले में, ए लिंकक से एसक्यूएल द्वारा उत्पन्न एक वर्ग है जब मैंने एसक्यूएल वर्ग में एक लिंक बनाया और इसमें एक टेबल जोड़ा। चूंकि कक्षा ए में लिंक और लिंक से एसक्यूएल निर्भरता है, इसलिए मैं इसे अपने अनुप्रयोगों में बेनकाब नहीं करना चाहता, इसलिए मैं कक्षा बी बनाता हूं, जिसमें कोई निर्भरता नहीं है। तो मुझे कक्षा ए उदाहरणों की सूची से कक्षा बी के उदाहरणों की एक सूची तैयार करने की आवश्यकता है। – Jeremy

उत्तर

26
List<B> listB = listA.Select(a => new B() 
    { 
     Count = a.TotalCount, 
     Title = a.Title 
    }).ToList(); 

अलग वाक्यविन्यास के साथ एडुनकन के समाधान के समान ही है। अपना चयन लें ..

+0

क्या सूची सूची से मूल्यों को फ़िल्टर करने का कोई तरीका है ताकि सूची बी को सूची में मौजूद प्रत्येक आइटम की आवश्यकता न हो? – user20358

11
var list = 
    from a in TableA 
    select new B { 
    Count = a.TotalCount, 
    Title = a.Title 
    }; 

आप अपने चुने हुए खंड में बी का एक उदाहरण नया बनाते हैं, और सी # 3.0 में इनलाइन प्रॉपर्टी असाइनमेंट सुविधा का उपयोग करके गुणों को असाइन करते हैं।

इनलाइन मैपिंग के फायदे आपके लिंक कथन के स्थगित निष्पादन से आता है। लिंक संशोधित कथन को मैप करेगा, और इसे आपके IQueryable से निष्पादित करेगा। उदाहरण के लिए:

public class ClassA 
{ 
    public int TotalCount;  
    public string Title; 
} 

public class ClassB 
{ 
    public int Count; 
    public string Title; 
} 

public IQueryable<ClassB> FetchAllOfClassB() 
{ 
    var list = 
    from a in TableOfClassA 
    select new ClassB { 
     Count = a.TotalCount, 
     Title = a.Title 
    }; 

    return list.AsQueryable(); 
} 

तकनीकी तौर पर, AsQueryable() थोड़ा अनावश्यक है। कभी-कभी मैं इसे एक बिंदु बनाने के लिए इसका उपयोग करता हूं, अन्य कहते हैं कि यह बिल्कुल जरूरी है। कोई भी कम नहीं, सूची वस्तु स्वयं क्लासबी के IQueryable है।

फिर आप चेन को आगे बढ़ाकर FetchAllOfClassB() पर कॉल कर सकते हैं और IQuerable का उपयोग कर सकते हैं। यह बहुत चिकना और कुशल है।

+2

बस इस तरह कुछ लिखने के बारे में, लेकिन आप इसे कवर किया गया है! +1 – RCIX

+2

मुझे linq पसंद है। +1। –

+0

धन्यवाद दोस्तों। आपकी टिप्पणियों को भी ऊपर उठाया। :) – eduncan911

0

हम्म, मेरे सिर के ऊपर से (इसलिए शायद त्रुटियों हो जाएगा!):

List<B> = from a in listOfA select new B(a.count, a.title);

चाल कर सकता है।

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