Перевести с синтаксиса лямбда (метода) на синтаксис запроса (LINQ)
Как можно перевести
var vehiclequery = db.position
.GroupBy(c => c.device_id)
.Select(g => g.OrderByDescending(c => c.sendtime).FirstOrDefault())
.Select(c => new myPosition()
{
battery_percentage = c.battery_percentage,
device_id = c.device_id,
latitude = c.latitude,
longitude = c.longitude,
speed = c.speed,
sendtime = c.sendtime
});
запросить синтаксис? Теперь у меня есть что-то глупое, и я понятия не имею, как заставить это работать. Это как то так?
var vehiclequery = from dPosition in db.position
group dPosition by dPosition.device_id into xx
select new
{
device_id = xx.device_id
};
Я знаю, что чего-то не хватает, но я застрял на этом этапе. Я попробовал инструмент, рекомендованный здесь в стеке - http://www.linqpad.net/, но это только переводит синтаксис запроса в синтаксис метода.
Спасибо за любую помощь или руководство, как сделать эту работу. Некоторые полезные справочные страницы также будут очень полезны, сейчас я использую только http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
1 ответ
Решение
Это не транскрипция 1-к-1, из-за того, как let
работает (у вас еще есть доступ к xx
после let
), но даст те же результаты:
var vehiclequery = from dPosition in db.position
group dPosition by dPosition.device_id into xx
let c = xx.OrderByDescending(x => x.sendtime).FirstOrDefault()
select new
{
battery_percentage = c.battery_percentage,
device_id = c.device_id,
latitude = c.latitude,
longitude = c.longitude,
speed = c.speed,
sendtime = c.sendtime
};
или с подзапросом в качестве синтаксического запроса:
var vehiclequery = from dPosition in db.position
group dPosition by dPosition.device_id into xx
let c = (from x in xx
orderby x.sendtime desc
select x).FirstOrDefault()
select new
{
battery_percentage = c.battery_percentage,
device_id = c.device_id,
latitude = c.latitude,
longitude = c.longitude,
speed = c.speed,
sendtime = c.sendtime
};