Я пытаюсь запросить базу данных для довольно небольшого (~ 80 строк) набора данных, где мне нужно включить примитив BIT, указывающий, является ли TestPartItem
последним элементом TestPart
, используя следующий запрос:
SELECT tpt.[Name] TestPartTypeName, 1 AS split,
tpi.Number, tpi.Header, tpi.Instruction, tpi.Answer, tpi.[Description],
tpi.Letter, 1 AS split,
tpo.Label, tpo.ImageFileName, 1 AS split,
CASE WHEN
(SELECT MAX(TestPartItemID) FROM TestPart_TestPartItem WHERE TestPartID = 1) = tpi.ID
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS IsLastItemInTestPart
FROM TestPart tp
JOIN TestPartType tpt ON tpt.ID = tp.TestPartTypeID
JOIN TestPart_TestPartItem tptpi ON tptpi.TestPartID = tp.ID
JOIN TestPartItem tpi ON tpi.ID = tptpi.TestPartItemID
JOIN TestPartItem_TestPartItemOption tpitpo ON tpitpo.TestPartItemID = tpi.ID
JOIN TestPartItemOption tpo ON tpo.ID = tpitpo.TestPartItemOptionID
WHERE tpi.ID = 1 AND tp.ID = 1
Хотя я точно знаю, что могу добавить поле битов в таблицу TestPartItem
, оно не будет работать из-за отношения «многие ко многим» между TestPart
s и TestPartItem
- заданным TestPartItem
не обязательно последний элемент из всех TestParts
var testPartItemDictionary = new Dictionary<int, TestPartItem>();
TestPartItemAggregate aggregate = new TestPartItemAggregate();
var result = conn.Query<TestPartType, TestPartItem, TestPartItemOption, bool, TestPartItem>(sql, (testPartType, testPartItem, testPartItemOption, IsLastItemInTestPart) =>
{
TestPartItem tpi;
if (!testPartItemDictionary.TryGetValue(testPartItem.ID, out tpi))
{
tpi = testPartItem;
aggregate.IsLastInTestPart = IsLastItemInTestPart;
aggregate.TestPartTypeName = testPartType.Name;
testPartItemDictionary.Add(testPartItem.ID, tpi);
}
tpi.TestPartItemOptions.Add(testPartItemOption);
return tpi;
}, splitOn: "split").Distinct().ToList();
aggregate.TestPartItem = testPartItemDictionary.Values.First();
Отображение объекта без IsLastItemInTestPart
bool работает должным образом, но при добавлении bool выдается исключение с сообщением: «Invalid cast»
Я просто слишком много спрашиваю у Даппера, комбинируя строго типизированные объекты с примитивами? : -)
Заранее спасибо.