亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Dapper 填充類對象

使用 Dapper 填充類對象

C#
臨摹微笑 2022-01-09 16:33:53
public class Expenses{    public Category Category { get; set; }    public PaymentModes PaymentModes { get; set; }}public class Category{    public int CategoryID { get; set; }    public string CategoryName { get; set; }}public class PaymentModes{    public int PaymentModeID { get; set; }    public string PaymentMode { get; set; }}public class ViewModel{   public IEnumerable<Month> Month { get; set; }   public IEnumerable<Category> Category { get; set; }   public IEnumerable<Expenses> Expenses { get; set; }}所以我有這些課程?,F在我想使用 Dapper 填充 Expense 類對象。但我總是將 Category 和 PaymentModes 設為 null。這是我從 DB 得到的結果:以下是獲取費用數據的方法:public ViewModel FetchSummaryData(Expenses expenses){    DynamicParameters param = new DynamicParameters();    ViewModel viewModel = new ViewModel();    param.Add("@flag", expenses.flag);    var result = db.QueryMultiple("sp_Summary", param, commandType: CommandType.StoredProcedure);    if (result != null)    {        viewModel.Category = result.Read<Category>();        viewModel.Expenses = result.Read<Expenses>();    }    return viewModel;}如您所見,該特定 ExpenseID 的 Category 和 PaymentModes 始終為空。如何使用 Dapper 填充這些對象的屬性?謝謝你。
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

我想您有一個 Expenses 表,其與 PaymentModes 和 Category 表的關系為 1:1。在這種情況下,您的 sp 應該返回 Expenses 表中的所有記錄,其中首先列出 Expenses 字段,然后是 PaymentModes 字段,最后是 Category 字段。像這樣的東西


select e.*, p.PaymentModeId, p.PaymentMode, c.CategoryID, c.CategoryName

from tbl_Expenses e inner join PaymentModes p on e.PaymentModeID = p.PaymentModeID

               inner join Category c on e.CategoryID = c.CategoryID

where ......

如果您與 PaymentModes 和 Category 表沒有關系,但所有內容都存儲在單個 Expenses 表中,那么您不需要聯接,只需按正確順序列出所有字段,以便 Dapper 知道如何使用您的字段填充所需的對象


select ExpenseID, Price, ExpenseDate, ....., 

       PaymentModeID, PaymentMode,

       CategoryID, CategoryName

from tbl_Expenses

where ....

在任何情況下,您都可以使用


var result = db.Query<Expenses, PaymentModes, Category, Expenses>("sp_Summary", 

             (e,p,c) => 

             {

                e.PaymentModes = p;

                e.Category = c;

                return e;

             }, splitOn: "PaymentModeID,CategoryID", param: param, commandType: CommandType.StoredProcedure);

此時,結果變量是IEnumerable<Expense>具有正確PaymentModes和Category集的 a。


該splitOn參數允許小巧玲瓏知道哪個領域應該由調用查詢方法所需的三個對象分開你的結果數據。


因此,直到 PaymentModeID 的所有字段都分配給 Expenses 變量,然后直到 CategoryID 的字段轉到 PaymentModes 變量,而 Category 變量的最后一個字段傳遞給 lambda 表達式。

在 lambda 中,您只需將p和c變量分配給Expenses 變量的適當字段并滿足返回 Expenses 變量的 Func 簽名


查看完整回答
反對 回復 2022-01-09
  • 1 回答
  • 0 關注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號