web-dev-qa-db-ja.com

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'

最小値と最大値を取得するデータは次のとおりです。

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
37
Erwin1

これはあなたのために働くはずです

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

ここ から)

93
pjama

最も古い日付(最小値)を探している場合は、ソートしてから、返された最初のアイテムを取得します。 C#でごめんなさい:

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

上記はオブジェクト全体を返します。日付を返すだけの場合:

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

どちらの方向に行くべきか、再:Linq to Sql vs Linq to Entities、最近は本当に多くの選択肢がありません。 Linq to Sqlは開発されていません。 Linq to Entities(Entity Framework)は、最近マイクロソフトによって推奨されているパスです。

From Microsoft Entity Framework 4 in Action (MEAP release)by Manning Press:

LINQ to SQLの将来はどうですか?

互換性の理由から、LINQ to SQLがFramework 4.0に含まれているのは秘密ではありません。 Microsoftは、Entity Frameworkがデータアクセスに推奨されるテクノロジーであることを明確に述べています。将来的には、LINQ to SQLのみが維持され、ほとんど進化しませんが、強力に改善され、他の技術と緊密に統合されます。

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

datetime mindata = mydate[0];
0
Praneeth