ให้มี:
Expression<Func<Message, bool>> exp1 = x => x.mesID == 1;
Expression<Func<MessageDTO, bool>> exp2 = x => x.mesID == 1;
ตอนนี้ฉันต้องส่ง exp1 ถึง _db.Messages.where(exp1);
ปัญหาคือฉันมีเพียง exp2 เท่านั้น ฉันต้องแปลงประเภทเป็น Message คุณสมบัติทั้งหมดเหมือนกัน !
ตอนนี้ฉันทำสิ่งนี้:
var par = Expression.Parameter(typeof(Message));
var ex = (Expression<Func<Message, bool>>)Expression.Lambda(exp2.Body, par);
ปัญหานี้คือพารามิเตอร์อินพุตได้รับการเปลี่ยนแปลงใช่ ! แต่ x ภายในเนื้อความของแลมบ์ดา "x.mesID" นั้นเป็นแบบเก่า
มีวิธีใดที่จะเปลี่ยนประเภทพารามิเตอร์ทั้งหมดในร่างกายด้วยหรือเปลี่ยนพารามิเตอร์อินพุตออกไปมันก็สะท้อนถึงร่างกายด้วย
ฉันเดาว่านี่เป็นปัญหาใหญ่ที่ฉันมีกับ LINQ เสมอ เนื่องจากระหว่างเลเยอร์ฉันไม่สามารถผ่านคลาสที่สร้างขึ้นได้ เนื่องจากจะทำให้เลเยอร์เชื่อมโยงกัน ดังนั้นฉันต้องสร้างคลาสน้ำหนักเบา ตอนนี้ฉันจะใช้วิธีการเช่น _db.Messages ได้อย่างไร .ที่ไหน(); จากชั้นยุ่งเหรอ?!! ในขณะที่ชั้นธุรกิจไม่รู้อะไรเกี่ยวกับประเภทข้อความ แต่รู้แค่ MessageDTO เท่านั้น