C# LINQ แลมบ์ดานิพจน์

C Linq Laemb Da Niphcn



นิพจน์แลมบ์ดาใน C# รับนิพจน์/คำสั่งเงื่อนไขเป็นเนื้อหาโดยตรงโดยไม่มีชื่อ เราจำเป็นต้องระบุพารามิเตอร์ จากนั้นจึงกำหนดนิพจน์ให้ ในขณะที่ทำงานกับ Language Integrated Query (LINQ) คุณอาจมีข้อกำหนดว่าคุณต้องแปลงข้อมูลที่มีอยู่ในแหล่งข้อมูลหรือแปลงแหล่งข้อมูลหนึ่งเป็นแหล่งข้อมูลอื่น ในคำแนะนำนี้ เราจะดูวิธีกรองระเบียนจากแหล่งข้อมูลโดยระบุนิพจน์แลมบ์ดาและเลือกระเบียนจากแหล่งข้อมูล

ไวยากรณ์:

  1. การแสดงออกของแลมบ์ดา: (พารามิเตอร์) => นิพจน์
  2. คำชี้แจงแลมบ์ดา: { คำสั่งเงื่อนไข 1 คำสั่ง 2 … }

ตัวอย่างที่ 1:

สร้างรายการ 'ปุ๋ย' ที่มีห้าสาย ใช้นิพจน์แลมบ์ดาที่ส่งคืนสตริงทั้งหมดจากรายการ

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ตัวอย่างแลมบ์ดานิพจน์ {

คงที่ สาธารณะ เป็นโมฆะ หลัก ( )
{

// สร้างรายชื่อปุ๋ย
รายการปุ๋ย = ใหม่ รายการ ( ) ;
ปุ๋ย . เพิ่ม ( 'ยูเรีย' ) ;
ปุ๋ย . เพิ่ม ( 'ไนโตรเจน' ) ;
ปุ๋ย . เพิ่ม ( 'โพแทสเซียม' ) ;
ปุ๋ย . เพิ่ม ( 'ไดแอมโมเนียมฟอสเฟต' ) ;
ปุ๋ย . เพิ่ม ( 'ฟอสฟอรัส' ) ;

// ใช้ Lambda Expression เพื่อเลือกปุ๋ยทั้งหมด
เคยเป็น ผลลัพธ์ = ปุ๋ย . เลือก ( inp1 => inp1 ) ;
แต่ละ ( เคยเป็น ฉัน ใน ผลลัพธ์ )
{
คอนโซล . เขียนไลน์ ( ฉัน ) ;
}

}
}

เอาท์พุต:









คำอธิบาย:



1. สร้างรายการประเภทสตริงชื่อ “ปุ๋ย” เพิ่มห้าสตริงในรายการนี้

2. ใช้นิพจน์แลมบ์ดาเพื่อเลือกปุ๋ยทั้งหมด ในที่นี้ นิพจน์ใช้กับโอเปอเรเตอร์ “Select” การแสดงออกคือ inp1 => inp1 จากนั้น เราใช้ลูป 'foreach' เพื่อแสดงสตริงที่ส่งคืนโดยนิพจน์แลมบ์ดา





ตัวอย่างที่ 2:

ใช้นิพจน์แลมบ์ดาเพื่อเลือกปุ๋ยที่มี 'ฟอสเฟต'

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ตัวอย่างแลมบ์ดานิพจน์ {

คงที่ สาธารณะ เป็นโมฆะ หลัก ( )
{

// สร้างรายชื่อปุ๋ย
รายการปุ๋ย = ใหม่ รายการ ( ) ;
ปุ๋ย . เพิ่ม ( 'ยูเรีย' ) ;
ปุ๋ย . เพิ่ม ( 'ไนโตรเจน' ) ;
ปุ๋ย . เพิ่ม ( 'ออร์โท - ฟอสเฟต' ) ;
ปุ๋ย . เพิ่ม ( 'ไดแอมโมเนียมฟอสเฟต' ) ;
ปุ๋ย . เพิ่ม ( 'ฟอสฟอรัส' ) ;

// ใช้ LambdaExpression เพื่อเลือกปุ๋ยที่มี - 'ฟอสเฟต'
เคยเป็น ผลลัพธ์ = ปุ๋ย . ที่ไหน ( inp1 => inp1 . ประกอบด้วย ( 'ฟอสเฟต' ) ) ;
แต่ละ ( เคยเป็น ฉัน ใน ผลลัพธ์ )
{
คอนโซล . เขียนไลน์ ( ฉัน ) ;
}

}
}

เอาท์พุต:



มีสองสายที่มี 'ฟอสเฟต' อยู่ในนั้น

คำอธิบาย:

1. สร้างรายการประเภทสตริงชื่อ “ปุ๋ย” เพิ่มห้าสตริงในรายการนี้

2. ที่นี่นิพจน์ใช้กับตัวดำเนินการ 'ที่ไหน' การแสดงออกคือ inp1 => inp1.Contains('ฟอสเฟต') จากนั้น เราใช้ลูป 'foreach' เพื่อแสดงสตริงที่ส่งคืนโดยนิพจน์แลมบ์ดา

ตัวอย่างที่ 3:

มาดูรายการ (order_quantity) ที่มีสามคำสั่งซื้อ ระบุนิพจน์แลมบ์ดาเพื่อเพิ่ม 5 ในแต่ละคำสั่ง

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ตัวอย่างแลมบ์ดานิพจน์ {

คงที่ สาธารณะ เป็นโมฆะ หลัก ( )
{

// สร้างรายการปริมาณ
รายการ order_quantity = ใหม่ รายการ ( ) ;
order_quantity . เพิ่ม ( 5 ) ;
order_quantity . เพิ่ม ( 7 ) ;
order_quantity . เพิ่ม ( 8 ) ;

// ใช้ LambdaExpression เป็น 5 สำหรับแต่ละคำสั่ง
เคยเป็น ผลลัพธ์ = order_quantity . เลือก ( inp1 => inp1 + 5 ) ;
แต่ละ ( เคยเป็น ฉัน ใน ผลลัพธ์ )
{
คอนโซล . เขียนไลน์ ( ฉัน ) ;
}

}
}

เอาท์พุต:

รายการ [5,7,8] เปลี่ยนเป็น [10,12,13]

คำอธิบาย:

1. สร้างรายการปริมาณประเภทจำนวนเต็ม

2. เราเลือกคำสั่งก่อน แล้วเพิ่ม 5 ในแต่ละคำสั่ง ดังนั้นจึงใช้ตัวดำเนินการ 'เลือก' การแสดงออกคือ inp1 => inp1 + 5

ตัวอย่างที่ 4:

สร้างรายการแหล่งข้อมูลประเภทเหตุการณ์ (มีสามแอตทริบิวต์ – Event_Name, Event_Status และ Event_Budget) และส่งคืนเรกคอร์ดด้วย Event_Budget ซึ่งมากกว่า 5,000

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

// สร้างคลาสชื่อ - 'Event_Source' โดยมี 5 เหตุการณ์
สาธารณะ ระดับ เหตุการณ์_แหล่งที่มา
{
สาธารณะ คงที่ เป็นโมฆะ หลัก ( )
{
// รายการเหตุการณ์
เหตุการณ์ IList = ใหม่ รายการ ( ) {
ใหม่ เหตุการณ์ ( ) { ชื่อเหตุการณ์ = 'ค่ายเทคนิค' ,เหตุการณ์_สถานะ = 'วางแผน' ,เหตุการณ์_งบประมาณ = 10,000 } ,
ใหม่ เหตุการณ์ ( ) { ชื่อเหตุการณ์ = 'ค่ายการตลาด' ,เหตุการณ์_สถานะ = 'สมบูรณ์' ,เหตุการณ์_งบประมาณ = 5,000 } ,
ใหม่ เหตุการณ์ ( ) { ชื่อเหตุการณ์ = 'อื่น' ,เหตุการณ์_สถานะ = 'วางแผน' ,เหตุการณ์_งบประมาณ = 1,000 } ,
ใหม่ เหตุการณ์ ( ) { ชื่อเหตุการณ์ = 'การเมือง' ,เหตุการณ์_สถานะ = 'วางแผน' ,เหตุการณ์_งบประมาณ = 13000 } ,
ใหม่ เหตุการณ์ ( ) { ชื่อเหตุการณ์ = 'การเงิน' ,เหตุการณ์_สถานะ = 'สมบูรณ์' ,เหตุการณ์_งบประมาณ = 20,000 } ,
} ;

//Event_Budget มากกว่า 5,000
เคยเป็น ผลลัพธ์ = เหตุการณ์ . ที่ไหน ( inp1 => inp1 . เหตุการณ์_งบประมาณ > 5,000 ) ;
แต่ละ ( เคยเป็น ฉัน ใน ผลลัพธ์ ) {
คอนโซล . เขียนไลน์ ( 'ชื่อ: ' + ฉัน . ชื่อเหตุการณ์ + ' สถานะ: ' + ฉัน . เหตุการณ์_สถานะ + ' งบประมาณ: ' + ฉัน . เหตุการณ์_งบประมาณ ) ;
}
}
}

สาธารณะ ระดับ เหตุการณ์ {
สาธารณะ สตริง ชื่อเหตุการณ์ { รับ ; ชุด ; }
สาธารณะ สตริง เหตุการณ์_สถานะ { รับ ; ชุด ; }
สาธารณะ นานาชาติ เหตุการณ์_งบประมาณ { รับ ; ชุด ; }
}

เอาท์พุต:

มีสามระเบียนในรายการ 'เหตุการณ์' ที่มี Event_Budget มากกว่า 5,000

คำอธิบาย:

1. ขั้นแรก เราสร้างคลาส 'เหตุการณ์' ที่มีแอตทริบิวต์สามรายการ

2. จากนั้น เราสร้างรายการของเหตุการณ์ห้ารายการ

3. การใช้ inp1 => inp1.Event_Budget > 5,000 นิพจน์แลมบ์ดา เราเลือกบันทึกที่มี Event_Budget มากกว่า 5,000

ตัวอย่างที่ 5:

ใช้รหัสก่อนหน้าและเปลี่ยนนิพจน์แลมบ์ดา ส่งคืนกิจกรรมด้วย Event_Name ที่ลงท้ายด้วย 'Camp' และด้วย Event_Status ซึ่งเป็น 'Planned'

//Lambda Expression - Event_Name ลงท้ายด้วย 'Camp' และ Event_Status คือ 'Planned'
เคยเป็น ผลลัพธ์ = เหตุการณ์ . ที่ไหน ( inp1 => inp1 . ชื่อเหตุการณ์ . ลงท้ายด้วย ( 'ค่าย' ) && inp1 . เหตุการณ์_สถานะ == 'วางแผน' ) ;
แต่ละ ( เคยเป็น ฉัน ใน ผลลัพธ์ ) {
คอนโซล . เขียนไลน์ ( 'ชื่อ: ' + ฉัน . ชื่อเหตุการณ์ + ' สถานะ: ' + ฉัน . เหตุการณ์_สถานะ + ' งบประมาณ: ' + ฉัน . เหตุการณ์_งบประมาณ ) ;
}

เอาท์พุต:

มีเพียงระเบียนเดียวเท่านั้นที่ตรงตามเงื่อนไขทั้งสอง

คำอธิบาย:

ที่นี่ เราระบุสองเงื่อนไขในนิพจน์แลมบ์ดา ตัวดำเนินการ && (และ) ใช้เพื่อทำให้สองเงื่อนไขเป็นจริง เงื่อนไขแรกใช้เมธอด EndsWith() เพื่อตรวจสอบว่าสตริงลงท้ายด้วยสตริงที่กำหนดหรือไม่ เงื่อนไขที่สองใช้ตัวดำเนินการ 'เปรียบเทียบ' (==) เพื่อตรวจสอบว่าทั้งสองค่าเท่ากันหรือไม่

บทสรุป

ใน C# นิพจน์แลมบ์ดาจะใช้นิพจน์/ข้อความแสดงเงื่อนไขเป็นเนื้อหาโดยไม่มีชื่อ เราจำเป็นต้องระบุพารามิเตอร์ จากนั้นนิพจน์จะถูกกำหนดให้กับมัน โดยทั่วไป สิ่งเหล่านี้ใช้เพื่อกรองบันทึกจากแหล่งข้อมูลที่กำหนด แปลงองค์ประกอบ และเลือกองค์ประกอบจากแหล่งข้อมูล/ลำดับ ในคู่มือนี้ เราได้พูดถึงห้าตัวอย่างที่แตกต่างกันซึ่งเลือก กรอง และแปลงองค์ประกอบโดยใช้นิพจน์แลมบ์ดา