มีไวยากรณ์ C # LINQ สำหรับเมธอด Queryable.SelectMany () หรือไม่


88

เมื่อเขียนแบบสอบถามโดยใช้ไวยากรณ์ C # LINQ มีวิธีใช้ Queryable.SelectMany จากไวยากรณ์คำหลักหรือไม่

สำหรับ

string[] text = { "Albert was here", 
                  "Burke slept late", 
                  "Connor is happy" };

ใช้วิธีการที่คล่องแคล่วฉันสามารถสอบถามได้

var tokens = text.SelectMany(s => s.Split(' '));

มีรูปแบบการสืบค้นที่คล้ายกับ

var tokens = from x in text selectmany s.Split(' ')

ตัวอย่างต้องการการปรับปรุง ... แต่ฉันสงสัยว่ามันได้รับประเด็นพื้นฐาน อย่าลังเลที่จะแนะนำตัวอย่างที่ดีกว่า
BrianCooksey

คำตอบ:


126

ใช่คุณทำซ้ำจาก ... ในข้อ:

var words = from str in text
            from word in str.Split(' ')
            select word;

4
@BCooksey - ใช่ ... เพราะคุณกำลังเลือกจากคอลเล็กชันที่ซ้อนอยู่ในผลลัพธ์แรก
Justin Niessner

3
SelectMany สามารถให้บริการการโทรทั้งหมดเหล่านี้ได้ซึ่งมีความยืดหยุ่นอย่างมาก แต่คอมไพเลอร์จะเลือกระหว่าง Select, SelectMany และแม้กระทั่งไม่มีการเปลี่ยนแปลงเลยขึ้นอยู่กับรูปแบบของแบบสอบถาม
Sprague


18

คำถามของคุณจะเขียนใหม่เป็น:

var tokens = from x in text
             from z in x.Split(' ')
             select z;

นี่คือหน้าเว็บที่ดีที่มีตัวอย่างแบบเคียงข้างกันของไวยากรณ์ Lambda และ Query:

เลือกผู้ดำเนินการหลายคนตอนที่ 1 - Zeeshan Hirani

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.