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 签名
- 1 回答
- 0 关注
- 173 浏览
添加回答
举报