2010-07-19 3 views
1

Я борюсь с проблемой (обычно простой для решения).Невозможно передать анонимный тип возвращаемого запроса из запроса в тип объекта

У меня есть база данных, содержащая таблицу «измерений». Каждое измерение имеет временную метку (datetime), значение (десятичное), тип измерения (внешний ключ для таблицы поиска) и относится к «элементу емкости» (главная таблица).

Я импортировал базу данных SQL в Entity Framework и создал из нее модель. Теперь я хочу запросить базовую линию . Базовая строка - это текущее состояние элемента емкости, и оно представлено последними измерениями для каждого типа этого конкретного элемента емкости.

Так что запрос должен быть возвращен: для определенного CapacityItem дайте мне самое последнее измерение каждого типа измерения. В SQL-запросе я делал «группу по» по типу измерения и делал MAX() на отметке времени. Но в Linq-2-сущности я, кажется, качаюсь в грязи. Мне нужна функция, которая возвращает IQueryable<Measurement>, содержащий все базовые измерения, но мои запросы возвращают какой-то анонимный тип, который невозможно придумать.

Надеюсь, я ясно дал понять. Когда я перечитаю это, я могу представить, что это не имеет большого смысла. Но я слишком долго смотрел на это, и мой ум начинает делать забавные вещи :-)

Любой, кто может меня достать в правильном направлении? Если необходимо, уточните пожалуйста.

Спасибо за миллион.

~ Роб

+0

Это может быть проще, если вы покажете нам некоторые из вашего кода, который у вас уже есть. Это также звучит так, как будто вам, возможно, придется немного почитать о LINQ и Entity Framework. Следующая ссылка была бесценна для меня и изобилует примерами того, как выполнить определенные действия в ваших запросах LINQ. http://msdn.microsoft.com/en-us/library/bb394939.aspx – Jagd

+0

@jagd, вы правы, я новичок LINQ и EF, и я недооценил кривую обучения. Спасибо за ссылку. Это было уже в моих закладках ;-) –

ответ

2

Что-то вроде:

var q = from m in Context.Measurements 
     group m by m.MeasurementType.Id into group 
     from bl in group 
     where bl.TimeStamp == group.Max(g => g.TimeStamp) 
     select bl; 

Это от верхней части головы и угадывание о вашей БД. Возможно, вам придется настроить его.

+0

Вы были почти на месте! В группировке есть ошибка (вы не можете назвать группу «группа»), и мне пришлось добавить предложение Where для фильтрации желаемого элемента емкости, но общая идея - именно то, что мне нужно. Вам понадобилось 5 минут? Хотел бы я спросить вас 24 часа назад :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^