ความแตกต่างระหว่างลูกหลาน Linq กับ XML และองค์ประกอบคืออะไร


181

ฉันเจอคำค้นหาทั้งสองนี้ใน VS IntelliSense ฉันพยายาม googling ความแตกต่างระหว่างพวกเขาและไม่ได้รับคำตอบที่ชัดเจน หนึ่งในสิ่งเหล่านี้มีประสิทธิภาพที่ดีที่สุดด้วยไฟล์ XML ขนาดเล็กและขนาดกลาง ขอบคุณ

คำตอบ:


292

Elementsค้นหาองค์ประกอบเหล่านั้นเท่านั้นที่เป็นลูกหลานโดยตรงเช่นเด็ก ๆ ในทันที

Descendants พบเด็กทุกระดับไม่ว่าจะเป็นเด็กแกรนด์เด็ก ฯลฯ ...


นี่คือตัวอย่างที่แสดงให้เห็นถึงความแตกต่าง:

<?xml version="1.0" encoding="utf-8" ?>
<foo>
    <bar>Test 1</bar>
    <baz>
        <bar>Test 2</bar>
    </baz>
    <bar>Test 3</bar>
</foo>

รหัส:

XDocument doc = XDocument.Load("input.xml");
XElement root = doc.Root;

foreach (XElement e in root.Elements("bar"))
{
    Console.WriteLine("Elements : " + e.Value);
}

foreach (XElement e in root.Descendants("bar"))
{
    Console.WriteLine("Descendants : " + e.Value);
}

ผลลัพธ์:

องค์ประกอบ: ทดสอบ 1
องค์ประกอบ: ทดสอบ 3
ลูกหลาน: การทดสอบ 1
ลูกหลาน: การทดสอบ 2
ลูกหลาน: ทดสอบ 3

ถ้าคุณรู้ว่าองค์ประกอบที่คุณต้องการเป็นเด็กทันทีแล้วคุณจะได้รับประสิทธิภาพที่ดีขึ้นถ้าคุณใช้แทนElementsDescendants


คำตอบที่ดีฉันมักจะคิดว่าทั้งสองมีความสำคัญเล็กน้อยในคำอธิบายของคุณ (เมื่ออธิบายองค์ประกอบคุณจำเป็นต้องใช้คำว่า "ลูกหลาน" เสมอเพราะเป็นทางเลือกเล็กน้อยเมื่อพูดถึงลูกหลาน
Mattisdada

16

Descendantsจะค้นหาทรีย่อยขององค์ประกอบปัจจุบันทั้งหมดสำหรับชื่อที่ระบุ (หรือจะส่งคืนแผนผังแบบแบนหากไม่มีชื่อ) ในขณะที่Elementsค้นหาเฉพาะลูกที่อยู่ในองค์ประกอบปัจจุบันเท่านั้น

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