У меня есть следующий код LINQ:
var count = (from ad in AccelerometerData
join ae in AccelerometerEvents on ad.AccelerometerDataId equals ae.AccelerometerData.AccelerometerDataId
where ad.Device.DeviceId == journey.Device.DeviceId && ae.TimeStamp >= journey.StartDateTime && ae.TimeStamp <= journey.EndDateTime
select ae).Count();
Когда я запускаю код, он выдает ошибку:
MySQL - Operand should contain 1 column(s)
Я запускаю код в LINQPad с драйвером MySQL. Я тестирую его в LINQPad перед тем, как добавить в свое приложение.
SQL, созданный из LINQPad, выглядит так:
SELECT COUNT(*)
FROM AccelerometerData AS t0
INNER JOIN AccelerometerEvent AS t1
ON (t0.AccelerometerDataId = (
SELECT t3.AccelerometerDataId, t3.DeviceId, t3.PacketId, t3.ReceivedDateTime, t3.StartDateTime
FROM AccelerometerData AS t3
WHERE (t3.AccelerometerDataId = t1.AccelerometerDataId)))
LEFT OUTER JOIN Device AS t2
ON (t2.DeviceId = t0.DeviceId)
WHERE (((t2.DeviceId = 103) AND (t1.TimeStamp >= @p0)) AND (t1.TimeStamp <= @p1))
Хороший привет @NetMage, я добавил сгенерированный sql.
Основываясь на этом, я предполагаю, что ae.AccelerometerData
является свойством навигации EF и что драйвер MySQL EF неправильно переводит выражение ae.AccelerometerData.AccelerometerDataId
, но разве у вас нет внешнего ключа для AccelerometerDataId
в AccelerometerEvents
, на который вы можете ссылаться напрямую?
LINQPad может показать вам сгенерированный SQL - как это выглядит?