โอเค ฉันจะทำมัน ฉันวางแผนที่จะโพสต์โฆษณา แต่แล้วฉันคิดว่าถ้าฉันโพสต์โฆษณาเพียงอย่างเดียว ฉันแน่ใจว่าจะต้องมีคำสาปและอิฐและไข่มากมายที่ปลิวว่อนไปทั่ว ใส่ DAC เข้าไปด้วย เกี่ยวกับ LINQ แบบกำหนดเอง ให้ฉันอธิบายโค้ดที่รองรับนิพจน์ บางทีมันอาจจะมีประโยชน์กับบางคนที่เขียนชั้นข้อมูลของตัวเองหรือต้องการเขียนส่วนขยาย LINQ ที่ใช้งานได้จริง แม้ว่ามันจะไม่มีประโยชน์ก็ตาม เอาไว้เป็น "ข้อเสนอแนะ" คงจะดีไม่น้อย!
ใน DAC เวอร์ชันก่อนหน้า นิพจน์ต่อไปนี้ใช้ในการสืบค้น:
IEnumerable<ปัญหา> q = this.dc.Query<ปัญหา>(Issue._.IssueID >= 0);
"น่ารัก" "_" นี้ดู "ยังไม่บรรลุนิติภาวะ" โดยเฉพาะในยุคที่ LINQ อาละวาดนี้ ดูเหมือน "ก้าวหน้าไปตามกาลเวลา" มาก ดังนั้นจึงมีเวอร์ชัน v2.6 ที่รองรับส่วนขยาย DAC LINQ
var q = this.dc.Query<ปัญหา>(s => s.IssueID > 0);
หรือ
var q = จาก s ใน (this.dc.GetQueryableData<Issue>())
โดยที่ s.IssueID > 0
เลือก;
การใช้งานสองวิธีข้างต้นจะขึ้นอยู่กับการแยกวิเคราะห์นิพจน์และการประกอบคำสั่ง SQL เป็นหลัก โพสต์ของ Lao Zhao เขียนได้ดีมาก และคุณสามารถดูซอร์สโค้ดของ DAC ได้ (ฉันกำลังแทรกโฆษณา)
สิ่งที่ฉันอยากจะพูดเป็นหลักในวันนี้คือ หากเดิมทีเรามีแผนผังนิพจน์ของตัวเองและฟังก์ชันการแยกวิเคราะห์แล้ว เราจะ "อัปเกรด" เพื่อรองรับ LINQ ได้อย่างง่ายดายได้หรือไม่ - ใช่ มันง่าย!
var q = จาก s ใน SystemUser._
โดยที่ s.FullName == s.FullName.Max
สั่งซื้อโดย s.UserID
เลือก s.Except(s.Password);
หากต้องการอนุญาตให้วัตถุเป็น "where", "orderby", "select" จากนั้นปล่อยให้ใช้วิธีชื่อ "Where", "OrderBy", "Select" หรือใช้วิธี Extension Method เช่นเดียวกับใน DAC:
QueryExpressionExtension คลาสคงที่สาธารณะ
-
RaisingStudio.Data.Expressions.IQueryExpression แบบคงที่สาธารณะ <T> โดยที่ <T>(
แหล่งที่มา RaisingStudio.Data.Expressions.IQueryExpression<T> นี้
นิพจน์<Func<T, RaisingStudio.Data.Expressions.ConditionExpression>> เพรดิเคต)
-
กลับ (ใหม่ RaisingStudio.Data.Expressions.QueryExpression<T>(
แหล่งที่มา.มูลค่า,
แหล่งที่มาตาราง
(ภาคแสดง.คอมไพล์())(source.Value)
แหล่งที่มาคอลัมน์));
-
RaisingStudio.Data.Expressions.IQueryExpression แบบคงที่สาธารณะ <T> OrderBy<T>(
แหล่งที่มา RaisingStudio.Data.Expressions.IQueryExpression<T> นี้
นิพจน์<Func<T, RaisingStudio.Data.Expressions.ColumnExpression>> เพรดิเคต)
-
สาธารณะ RaisingStudio.Data.Expressions.IQueryExpression แบบคงที่สาธารณะ <T> เลือก <T>(
แหล่งที่มา RaisingStudio.Data.Expressions.IQueryExpression<T> นี้
นิพจน์<Func<T, object>> เพรดิเคต)
-
-
ในการใช้วิธีการนี้ ให้เรียกวิธีการคอมไพล์บนนิพจน์ "ระบบ" ขาเข้าเพื่อส่งคืนนิพจน์ "กำหนดเอง" จากนั้นบันทึกนิพจน์ "กำหนดเอง" เหล่านี้ใน "QueryExpression" )" เมื่อดำเนินการ "แบบสอบถาม" นิพจน์ "กำหนดเอง" ที่บันทึกไว้สามารถนำออกมาได้โดยตรง ด้วยวิธีนี้ แบบสอบถามสามารถนำไปใช้ได้โดยใช้การแยกวิเคราะห์ดั้งเดิมของนิพจน์ "กำหนดเอง" ในโค้ดด้านบน - -