Linq To Sql vb.net помощь - PullRequest
1 голос
/ 08 мая 2009

У меня есть таблица, и мне нужно выбрать запись на основе идентификатора. Я только хочу вернуть запись, которая имеет Макс (Дата) в поле даты. Как мне это сделать?

В SQL Server я использую это

SELECT * FROM dch
WHERE EffectiveDate = (SELECT MAX(EffectiveDate) FROM dch
WHERE ID = 99) AND ID = 99

Как я могу сделать это в Linq. К сожалению, это приложение написано на VB.NET, поскольку мы унаследовали его таким образом.

Я пытался это

  Dim qry = (From dch In db.dch _
                  Where dch.Dealer.Equals(Dealer) _
                  Select dch.EffectiveDate).Max()

или

  Dim qry = (From dch In db.dch _
                  Where dch.Dealer.Equals(Dealer) _
                  Select ).Max(dch.EffectiveDate)

И, очевидно, они не работают. Я даже близко? Любые идеи будут оценены.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 08 мая 2009

Прошу прощения за любые ошибки в моем синтаксисе VB, я (в основном) программист C #.

Dim item = db.dch.Where( Func(d) d.ID == 99 ) _
                 .OrderByDescending( Func(d) d.EffectiveDate )_
                 .Take(1)

На самом деле это будет реализовано как

select top 1 <...columns...>
from dch
where ID == 99
order by EffectiveDate desc

, что, я думаю, эквивалентно вашему запросу.

0 голосов
/ 08 мая 2009

Во втором запросе вы должны передать лямбда-выражение в качестве аргумента методу расширения Max:

Dim qry = (From dch In db.dch _
          Where dch.Dealer.Equals(Dealer) _
          ).Max(Function (item) item.EffectiveDate)

Редактировать: Взглянув еще раз на ваш вопрос, я понимаю, что на самом деле я не отвечаю на него, потому что вам нужно будет сделать второй запрос, чтобы получить фактические результаты. Кроме того, первый запрос, который вы пробовали, должен делать то же самое, что и мой запрос (то есть получить максимальное значение EffectiveDate).

0 голосов
/ 08 мая 2009

Я не отвечаю конкретно на ваш вопрос. Это еще один из тех, кто учит человека ловить рыбу по сценариям типа ... но, изучая Linq, отметьте этот сайт и заходите на него часто. 101 Образцы Linq VB

Ваш конкретный ответ здесь под Максом примерно на полпути вниз.

Этот сайт решит 80% новых вопросов LINQ в будущем.

Для справки, по вашему описанию я думаю, что это то, что вы хотите.

dim results = (from d in db.dch where d.ID == 99 select d.EffectiveDate).Max()

Конечно, будет возвращена только самая высокая Дата вступления в силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...