Tôi đang cố gắng trả lại kết quả bằng phẳng được đặt thành đối tượng lồng nhau với Dapper.NET (EmergingIssue chứa cả đối tượng Lý do và Trạng thái), nhưng truy vấn không điền tất cả các cột. Xem POCOs dưới đây:Dapper truy vấn đối tượng lồng nhau - không điền tất cả các thuộc tính
public class EmergingIssue
{
public string Category;
public string Brand;
public string Sku;
public string SkuDesc;
public string ManufacturingSite;
public double? CurrentAvailableWfc;
public Reason Reason;
public Status Status;
public double? TargetWfc;
public DateTime? DateItemAdded;
public string UserComment;
public string PlannerID;
}
public class Reason
{
public int ReasonId;
public string ReasonDesc;
}
public class Status
{
public int StatusId;
public string StatusDesc;
}
Dưới đây là đoạn code mà tôi đang cố gắng để dự kiến kết quả thiết lập để lớp học của tôi EmergingIssue (thông qua từ một câu hỏi StackOverflow tương tự):
public static List<EmergingIssue> GetEmergingIssues()
{
using (var conn = new OracleConnection(Constant.DatabaseConnection()))
{
conn.Open();
StringBuilder sql = new StringBuilder();
sql.Append("SELECT ei.CATEGORY, ei.BRAND, ei.SKU, ei.SKU_DESC SkuDesc");
sql.Append(" ,MANUFACTURING_SITE ManufacturingSite, CURRENT_AVAILABLE_WFC CurrentAvailableWfc");
sql.Append(" ,ei.TARGET_WFC TargetWFC");
sql.Append(" ,ei.DATE_ITEM_ADDED DateItemAdded");
sql.Append(" ,ei.USER_COMMENT UserComment");
sql.Append(" ,ei.PLANNER_ID PlannerID");
sql.Append(" ,ei.REASON_ID ReasonID, r.REASON_DESC ReasonDesc");
sql.Append(" ,ei.STATUS_ID StatusID, s.STATUS_DESC StatusDesc");
sql.Append(" FROM EMERGING_ISSUE ei");
sql.Append(" LEFT OUTER JOIN EMERGING_ISSUE_STATUS s ON s.STATUS_ID = ei.STATUS_ID");
sql.Append(" LEFT OUTER JOIN MERGING_ISSUE_REASON r ON r.REASON_ID = ei.REASON_ID");
List<EmergingIssue> emergingIssues = conn.Query<EmergingIssue, Reason, Status, EmergingIssue>(sql.ToString(),
(ei, r, s) =>
{
ei.Reason = r;
ei.Status = s;
return ei;
},
splitOn: "ReasonID, StatusID").ToList();
return emergingIssues;
}
}
Kết quả này đang trở lại một vài trường, nhưng người dùng, PlannerID, DateItemAdded và một số trường khác không được điền. Có vẻ như rõ ràng là vấn đề nằm trong hàm LINQ đang chiếu dữ liệu, nhưng tôi không đủ quen thuộc với cú pháp để hiểu cách giải quyết nó.
Hơn nữa, có một tài nguyên Linq có giá trị để tìm hiểu về chức năng nâng cao hơn không? Tôi thường xuyên sử dụng chức năng .Where(x => x.StringValue == "Test")
(và các chức năng tương tự, đơn giản) khác, nhưng tôi không thường xuyên chuyển các chức năng như tôi đang cố gắng ở trên.
Đó là do thứ tự cột của bạn trong câu lệnh chọn không giống như splitOn nên Dapper trả về giá trị rỗng. –