ฉันจะเชื่อว่านี่เป็นสถานที่ที่เหมาะสมที่จะใช้คำสั่งแยกแบบสอบถาม / ตัวอย่างเช่น:
// query
var validItems = items.Where(i => i.Field != null && i.State != ItemStates.Deleted);
// command
foreach (var item in validItems) {
// do stuff
}
นอกจากนี้ยังช่วยให้คุณสามารถตั้งชื่อเอกสารด้วยตนเองที่ดีให้กับผลลัพธ์การสืบค้น นอกจากนี้ยังช่วยให้คุณมองเห็นโอกาสในการปรับโครงสร้างอีกครั้งเนื่องจากรหัส refactor นั้นง่ายกว่าที่จะสืบค้นข้อมูลหรือแปลงข้อมูลเพียงรหัสผสมที่พยายามทำทั้งสองอย่าง
เมื่อทำการดีบั๊กคุณสามารถหยุดก่อนที่foreach
จะตรวจสอบได้อย่างรวดเร็วว่าเนื้อหาของการvalidItems
แก้ไขสิ่งที่คุณคาดหวัง คุณไม่จำเป็นต้องก้าวเข้าไปในแลมบ์ดาเว้นแต่ว่าคุณต้องการ หากคุณจำเป็นต้องก้าวเข้าไปในแลมบ์ดาฉันขอแนะนำให้แยกออกเป็นฟังก์ชั่นแยกต่างหากจากนั้นค่อยก้าวผ่านสิ่งนั้นแทน
มีความแตกต่างในประสิทธิภาพหรือไม่ หากแบบสอบถามได้รับการสนับสนุนโดยฐานข้อมูลดังนั้นรุ่น LINQ มีโอกาสที่จะทำงานได้เร็วขึ้นเนื่องจากแบบสอบถาม SQL อาจมีประสิทธิภาพมากกว่า หากเป็น LINQ ไปยัง Objects คุณจะไม่เห็นความแตกต่างด้านประสิทธิภาพที่แท้จริง เช่นเคยโปรไฟล์รหัสของคุณและแก้ไขปัญหาคอขวดที่มีการรายงานจริงแทนที่จะพยายามทำนายการเพิ่มประสิทธิภาพล่วงหน้า