我想编写原始 SQL 以从一组存在一对多关系的表中获取结果集。
我正在使用 Dapper 来实现此目的,但没有得到预期的结果。
第一张桌子是
Supplier
:
public class Supplier: IId
{
public int Id { get; set; }
public string Ref{ get; set; }
public DateTime CreatedOn { get; set; }
public List<Category> Categories{ get; set; }
public int? Ticket { get; set; }
}
然后是
Category
:
public class Category: IId
{
public int Id { get; set; }
public int SupplierId{ get; set; }
[JsonIgnore] public Supplier Supplier{ get; set; }
public Type Type { get; set; }
public Status Status { get; private set; }
public string CompletedBy { get; private set; }
public string CreatedBy { get; private set; }
public DateTime? CreatedOn { get; private set; }
public int? Ticket { get; set; }
}
这是我的 SQL:
var reference = 5055;
var sql = "SELECT S.Ref,S.CreatedOn,S.Ticket" +
" C.TaskId AS 'Id', C.SupplierId, C.Type, C.Status, C.CompletedBy, C.CreatedBy, C.CreatedOn, C.Ticket " +
"FROM Category C " +
"INNER JOIN Supplier S ON S.SupplierId = C.SupplierId " +
"WHERE S.Ref = @reference ";
var parameters = new {reference};
var suppliers = connection.QueryAsync<Supplier, List<Category>, Supplier>(sql, (supplier,category) => {
supplier.Categories = category;
return supplier;
}, parameters, splitOn: "Id" );
var result = suppliers.Result.OrderByDescending(x => x.CreatedOn).FirstOrDefault();
我想要的是类别应该包含在供应商实体中,我阅读了 Dapper 的文档,并从中尝试了此处显示的代码,但它不起作用。
有人可以帮我吗?
有人可以告诉我另一种方法吗,例如使用 SQL 视图或存储过程?
我如何找到解决这个问题的方法是
var reference = 5055;
var sql = "SELECT S.SupplierId As 'Id',S.Ref,S.CreatedOn,S.Ticket " +
"FROM Supplier S " +
"WHERE S.Ref = @reference ";
var parameters = new {reference};
var suppliers = connection.QueryFirstOrDefault<Supplier>(sql, parameters);
suppliers.Category = (List<Category>) connection.Query<Category>("SELECT C.CategoryId As 'Id',C.SupplierId,C.Type,C.Status,C.CompletedBy,C.CompletedOn,C.CreatedBy,C.CreatedOn,C.Ticket FROM Category C WHERE C.SupplierId= @supplierId", new { supplierId = suppliers.Id});
return suppliers;