Подтвердить что ты не робот

Как выбрать минимальные и максимальные значения даты в запросе Linq

Я перехожу от 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'.

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

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
4b9b3361

Ответ 1

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

//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(); 

(Из здесь)

Ответ 2

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

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 ясно заявила, что Сущность Рамки рекомендуются технологии для доступа к данным. в будущее будет сильно улучшено и тесно интегрированы с другими технологий, в то время как LINQ to SQL будет только поддерживаться и мало эволюционировали.

Ответ 3

dim mydate = from cv in mydata.t1s
  select cv.date1 asc

datetime mindata = mydate[0];