У меня есть 3 таблицы:
- TimeLog.Столбцы: Id, ProjectId, TimeTypeId и другие ..
- Проект.Столбцы: Id, Name и др ..
- TimeType.Столбцы: Id, описания и многое другое ...
Я хочу получить несколько постов из таблицы TimeLog, а слева соединить ее с информацией из Project и TimeType.
Я использую Dapper «Мульти-отображение запросов (один ко многим)» (https://dapper -tutorial.net / query # example --- query-anonymous ).Когда я запускаю запрос, я получаю список из 20 элементов, каждый из которых имеет свойства TimeLog.project и TimeLog.TimeType.Но все остальные значения свойств либо нулевые, либо пустые.
Код:
string sQuery = $"SELECT TOP {_apiSettings.QueryLimit} T.*, P.Id, P.Name AS ProjectName, TP.Id, TP.Description AS TimeTypeDescription FROM [TimeLog] AS T";
sQuery += " LEFT JOIN [Project] AS P ON T.ProjectId = P.Id";
sQuery += " LEFT JOIN [TimeType] AS TP ON T.TimeTypeId = TP.Id";
//sQuery += " WHERE T.IsActive = 1";
//sQuery += " AND MONTH([Date]) = 8 AND YEAR([Date]) = 2019";
var timeLogDictionary = new Dictionary<int, TimeLog>();
using (var connection = new SqlConnection(_apiSettings.ConnectionString))
{
connection.Query<TimeLog, Project, TimeType, TimeLog>(sQuery, (timelog, project, timetype) =>
{
TimeLog timelogEntry;
if (timeLogDictionary.TryGetValue(timelog.Id, out timelogEntry) == false)
{
timeLogDictionary.Add(timelog.Id, timelogEntry = timelog);
}
if (timelogEntry.Project == null)
{
if (project == null)
{
project = new Project();
} else
{
timelogEntry.Project = project;
}
}
if (timelogEntry.TimeType == null)
{
if (timetype == null)
{
timetype = new TimeType();
}
else
{
timelogEntry.TimeType = timetype;
}
}
return timelogEntry;
},splitOn: "ProjectId,TimeTypeId").ToList();
}