FreeSql (二十二)Dto 映射查詢


適合喜歡使用 dto 的朋友,很多時候 entity 與 dto 屬性名相同,屬性數據又不完全一致。

有的人先查回所有字段數據,再使用 AutoMapper 映射。

我們的功能是先映射,再只查詢映射好的字段,節省了io性能。

Select<Tag>().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
Select<Tag>().Limit(10).ToList(a => new TestDto());
Select<Tag>().Limit(10).ToList(a => new TestDto { });
Select<Tag>().Limit(10).ToList(a => new TestDto() { });
Select<Tag>().Limit(10).ToList<TestDto>();

這種映射支持單表/多表。

查找規則,查找屬性名,會循環內部對象 _tables(join 查詢后會增長),以 主表優先查,直到查到相同的字段。

如:

A, B, C 都有 id,Dto { id, a1, a2, b1, b2 },A.id 被映射。也可以指定 id = C.id 映射。

友情提醒:在 dto 可以直接映射一個導航屬性

fsql.Select<Song>().ToList(a => new DTO { xxx = a.ext }) 
//情況1:附加所有映射,再額外映射 ext,返回 List<DTO>

fsql.Select<Song>().ToList(a => new Song { id = a.id }) 
//情況2:只查詢 id,返回 List<Song>

fsql.Select<Song>().ToList(a => new { id = a.id }) 
//情況3:只查詢 id,返回 List<匿名對象>

fsql.Select<Song>().ToList(a => new DTO(a.id))
//情況4:只查詢 id,返回 List<DTO>

fsql.Select<Song>().ToList(a => new DTO(a.id) { xxx = a.ext })
//情況5:查詢 id, ext,返回 List<DTO>

fsql.Select<Song>().ToList(a => new Song(a.id))
//情況6:查詢 id,返回 List<Song>

fsql.Select<Song>().ToList(a => new Song(a.id) { xxx = a.ext })
//情況7:查詢 id, ext,返回 List<Song>

GroupBy 所有方法不使用 DTO 映射規則;

系列文章導航


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM