[C#] चयन और चयन करें के बीच अंतर


Answers

एसक्यूएल में क्रॉस जॉइन ऑपरेशन की तरह कई चुनें, जहां यह क्रॉस उत्पाद लेता है।
उदाहरण के लिए यदि हमारे पास है

Set A={a,b,c}
Set B={x,y}

निम्नलिखित सेट प्राप्त करने के लिए कई का उपयोग किया जा सकता है

{ (x,a) , (x,b) , (x,c) , (y,a) , (y,b) , (y,c) }

ध्यान दें कि यहां हम सभी संभव संयोजन लेते हैं जिन्हें सेट ए के तत्वों से सेट किया जा सकता है और बी सेट किया जा सकता है।

यहां एक LINQ उदाहरण है जिसे आप आजमा सकते हैं

  List<string> animals = new List<string>() { "cat", "dog", "donkey" };
  List<int> number = new List<int>() { 10, 20 };

  var mix=number.SelectMany(num => animals, (n, a) => new { n, a });

मिश्रण में फ्लैट संरचना जैसे निम्नलिखित तत्व होंगे

{(10,cat), (10,dog), (10,donkey), (20,cat), (20,dog), (20,donkey)}
Question

मैं Select और SelectMany बीच अंतर खोज रहा SelectMany लेकिन मुझे उपयुक्त उत्तर नहीं मिला है। LINQ से SQL का उपयोग करते समय मुझे अंतर सीखना होगा, लेकिन मुझे जो कुछ मिला है वह मानक सरणी उदाहरण हैं।

क्या कोई एसक्यूएल उदाहरण के लिए LINQ प्रदान कर सकता है?




बस एक वैकल्पिक दृश्य के लिए जो कुछ कार्यात्मक प्रोग्रामर को वहां मदद कर सकता है:

  • map Select
  • SelectMany कई bind (या अपने flatMap / flatMap लिए flatMap )



SelectMany() आपको एक बहुआयामी अनुक्रम को इस तरह से ध्वस्त करने देता है जिससे अन्यथा किसी दूसरे Select() या लूप की आवश्यकता होती है।

इस ब्लॉग पोस्ट पर अधिक जानकारी।




मुझे लगता है कि यह समझने का सबसे अच्छा तरीका है।

            var query =
            Enumerable
                .Range(1, 10)
                .SelectMany(ints => Enumerable.Range(1, 10), (a, b) => $"{a} * {b} = {a * b}")
                .ToArray();

        Console.WriteLine(string.Join(Environment.NewLine, query));

        Console.Read();

गुणा तालिका उदाहरण।




कुछ चयन कई आवश्यक नहीं हो सकता है। नीचे 2 प्रश्न एक ही परिणाम देते हैं।

Customers.Where(c=>c.Name=="Tom").SelectMany(c=>c.Orders)

Orders.Where(o=>o.Customer.Name=="Tom")

1 से कई रिश्तों के लिए,

  1. अगर "1" से शुरू करें, SelectMany की आवश्यकता है, यह कई लोगों को flattens।
  2. अगर "बहुत से" से शुरू करें, SelectMany की आवश्यकता नहीं है। ( अभी भी "1" से फ़िल्टर करने में सक्षम हो , यह भी मानक शामिल क्वेरी से नीचे सरल है)
from o in Orders
join c in Customers on o.CustomerID equals c.ID
where c.Name == "Tom"
select o



मैं शॉर्टकट में शामिल होने की तरह काम करने के लिए SelectMany समझता हूं।

तो तुम कर सकते हो:

var orders = customers
             .Where(c => c.CustomerName == "Acme")
             .SelectMany(c => c.Orders);



Links