Próbuję zwrócić zestaw wyników płaskich do zagnieżdżonego obiektu za pomocą Dapper.NET (EmergingIssue zawiera oba obiekty Reason i Status), ale zapytanie nie wypełnia wszystkich kolumn. Zobacz Poços poniżej:Zapytanie obiektu zagnieżdżonego Dappera - nie wypełniające wszystkich właściwości
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;
}
Poniżej znajduje się kod, gdzie jestem przystąpieniem do projektu zestaw wyników do mojej klasy EmergingIssue (przyjęta z podobnym pytaniem StackOverflow):
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;
}
}
Wynik ten powraca kilka pola, ale UserComment, PlannerID, DateItemAdded i kilka innych pól nie są wypełnione. Wydaje się oczywiste, że problem leży w funkcji Linq, która wyświetla dane, ale nie jestem dostatecznie zaznajomiony ze składnią, aby zrozumieć, jak rozwiązać ten problem.
Co więcej, czy istnieje cenny zasób Linq do nauki o bardziej zaawansowanych funkcjach? Często używam na przykład funkcji .Where(x => x.StringValue == "Test")
(i innych podobnych, prostych), ale często nie przekazuję funkcji, które próbuję wykonać powyżej.
To dlatego, że kolejność kolumn w instrukcji select nie jest taka sama jak splitOn, więc Dapper zwraca wartość null. –