मेरे पास टुपल्स की निम्नलिखित सूची है:

var allXmlUsers = new List<(string login, string email, string createdOn)>();
allXmlUsers.Add(("thompson", "sdfsd@dkfjdkf.com", "2015-03-04 20:32:04"));
allXmlUsers.Add(("dupont", "asdfdfd@dkfjdkf.com", "2017-03-04 20:32:04"));
allXmlUsers.Add(("james", "dfsdfs33@dkfjdkf.com", "2016-03-04 20:32:04"));

मैं इसे एक List<> से बदलना चाहता हूं जिसमें केवल सबसे हाल का आइटम है, उदा। "डुपोंट"।

मैं इस तरह एक एकल टुपल वस्तु वापस कर सकता हूं:

var single = (from x in allXmlUsers orderby x.createdOn descending select x).FirstOrDefault();

और मैं एक List<> लौटाता हूं जिसे इस तरह से पुन: व्यवस्थित किया जाता है:

var list = from x in allXmlUsers orderby x.createdOn descending select x;

लेकिन मैं एक List<> कैसे लौटाऊं जिसमें केवल एक टपल हो, अर्थात् सबसे हाल का, ऐसा कुछ?

//allXmlUsers = ((from x in allXmlUsers orderby x.createdOn descending select x).FirstOrDefault()).ToList();
//(error: cannot resolve symbol to List)
1
Edward Tanguay 7 जून 2018, 14:18

2 जवाब

सबसे बढ़िया उत्तर

आप संख्यात्मक से केवल 1 तत्व लेने के लिए Take विधि का उपयोग कर सकते हैं

var single = (from x in allXmlUsers orderby x.createdOn descending select x)
             .Take(1)
             .ToList();

संपादित करें

उपरोक्त स्निपेट एक खाली सूची (लंबाई 0 में से एक) लौटाएगा, यह वांछित व्यवहार हो सकता है, लेकिन आप इसके बजाय एक एकल null मान वाली सूची भी वापस करना चाहेंगे। यदि ऐसा है तो आप DefaultIfEmpty विधि का उपयोग कर सकते हैं

var single = (from x in allXmlUsers orderby x.createdOn descending select x)
             .Take(1)
             .DefaultIfEmpty()
             .ToList();
7
Titian Cernicova-Dragomir 7 जून 2018, 14:34

यदि यह एक ऐसा ऑपरेशन है जिसका आप अक्सर उपयोग करते हैं तो दूसरा विकल्प ToSingletonList एक्सटेंशन विधि इस प्रकार बनाना होगा:

public static class Extensions
{  
     /// <summary>
     /// Returns the first element of the sequence in a list or a default value in a list if the sequence contains no elements.
     /// </summary>
     /// <param name="source">The IEnumerable<T> to return the first element of.</param>
     /// <returns>default in a list if source is empty; otherwise, the first element in source in a list.</returns>

    public static List<T> ToSingletonList<T>(this IEnumerable<T> source) => 
               new List<T> { source.FirstOrDefault() };
}

फिर आपके मामले में आप करेंगे:

var single = (from x in allXmlUsers orderby x.createdOn descending select x).ToSingletonList();
0
Ousmane D. 7 जून 2018, 15:06