Как выбрать минимальное и максимальное значения даты в Linq Query - PullRequest
36 голосов
/ 05 марта 2011

Я перехожу с SQL на Linq и мне нужна помощь. Я тестирую как Linq-to-SQL, так и Linq-to-Entities. Я хочу попробовать оба, чтобы решить, какой из них подходит мне лучше всего. Ваша помощь приветствуется. Спасибо

Каков правильный синтаксис (если возможно, в vb.net) для выбора минимального значения даты из таблицы?

Dim mydata As New DataClassesDataContext
Dim myresult = From cv In mydata.T1s
                       Select cv.DATE1, cv.Date2, cv.Datex
myresult=Dump()

Я пробовал Я пытался использовать

Select amin=cv.DATE1.Min(), amax=cv.Date1.Max(), bmin=cv.Date2.Min(), etc....

выдает эту ошибку 'Min' is not a member of 'Date'.

Данные, которые я хочу получить мин и макс, ниже:

IOrderedQueryable<VB$AnonymousType_0<DateTime,DateTime>> (16 items) 

Date1                   Date2
17/Oct/09 12:00:00 AM   23/Oct/09 12:00:00 AM
10/Jan/09 12:00:00 AM   15/Feb/09 12:00:00 AM
27/Mar/09 12:00:00 AM   27/Mar/09 12:00:00 AM
30/May/09 12:00:00 AM   30/May/09 12:00:00 AM
25/Jan/09 12:00:00 AM   25/Mar/09 12:00:00 AM
01/Nov/09 12:00:00 AM   01/Nov/09 12:00:00 AM
21/Feb/09 12:00:00 AM   04/Mar/09 12:00:00 AM
02/Mar/09 12:00:00 AM   09/Mar/09 12:00:00 AM
07/Jul/09 12:00:00 AM   07/Jul/09 12:00:00 AM
27/Sep/09 12:00:00 AM   27/Sep/09 12:00:00 AM
05/Nov/09 12:00:00 AM   05/Nov/09 12:00:00 AM
15/Apr/09 12:00:00 AM   15/Apr/09 12:00:00 AM
08/Jun/09 12:00:00 AM   08/Jun/09 12:00:00 AM
07/Jul/09 12:00:00 AM   07/Jul/09 12:00:00 AM
30/Jul/09 12:00:00 AM   30/Jul/09 12:00:00 AM
04/Nov/09 12:00:00 AM   04/Nov/09 12:00:00 AM

Теперь решено, но это не идеальное решение, похоже, мне нужно было сделать отдельный запрос для каждого столбца, который требует функции aggreagate:

Sub Main

Dim mm = (From cv In T1s 
Select Datez = (cv.Date1)).Min()

Dim mm1 = (From cv In T1s 
Select Datez = (cv.Date1)).Max()

Dim mm2 = (From cv In T1s 
Select Datez = (Date2)).Min()

Dim mm3 = (From cv In T1s 
Select Datez = (Date2)).Max()
mm.dump()
mm1.dump()
mm2.dump()
mm3.dump()

End Sub

Результаты ниже

10/Jan/09 12:00:00 AM
05/Nov/09 12:00:00 AM
15/Feb/09 12:00:00 AM
05/Nov/09 12:00:00 AM

Ответы [ 3 ]

90 голосов
/ 05 марта 2011

Это должно работать для вас

//Retrieve Minimum Date
var MinDate = (from d in dataRows select d.Date).Min();

//Retrieve Maximum Date
var MaxDate = (from d in dataRows select d.Date).Max(); 

здесь )

36 голосов
/ 05 марта 2011

Если вы ищете самую старую дату (минимальное значение), вы должны отсортировать, а затем взять первый возвращенный элемент.Извините за C #:

var min = myData.OrderBy( cv => cv.Date1 ).First();

Выше вернется весь объект.Если вы просто хотите, чтобы дата была возвращена:

var min = myData.Min( cv => cv.Date1 );

Относительно того, в каком направлении двигаться дальше: re: Linq to Sql vs Linq to Entities, на самом деле выбора в действительности не так много.Linq to Sql больше не разрабатывается;Linq to Entities (Entity Framework) - это рекомендуемый путь Microsoft в наши дни.

С Microsoft Entity Framework 4 в действии (выпуск MEAP) от Manning Press:

А как насчет будущего LINQ to SQL?

Не секрет, что LINQ to SQL включен в Framework 4.0 по соображениям совместимости.Microsoft четко заявила, что Entity Framework является рекомендуемой технологией для доступа к данным.В будущем он будет сильно улучшен и тесно интегрирован с другими технологиями, тогда как LINQ to SQL будет только поддерживаться и развиваться незначительно.

0 голосов
/ 05 марта 2011
dim mydate = from cv in mydata.t1s
  select cv.date1 asc

datetime mindata = mydate[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...