3

dte特定の日付 ( )の日付部分に一致するレコードを取得するために、次の LINQ-to-Entities クエリがあります。

Dim qry = entities.Works.Where(Function(w) w.JobID = RecordID And
  SqlFunctions.DatePart("y", w.FromDate) = SqlFunctions.DatePart("y", dte) And
  SqlFunctions.DatePart("m", w.FromDate) = SqlFunctions.DatePart("m", dte) And 
  SqlFunctions.DatePart("d", w.FromDate) = SqlFunctions.DatePart("d", dte))

最初に次のように記述して、この式を再利用したいと思います。

Public SqlDateEquals As System.Linq.Expressions
    .Expression(Of Func(Of DateTime, DateTime, Boolean)) = Function(dte1, dte2)
     SqlFunctions.DatePart("y", dte1) = SqlFunctions.DatePart("y", dte2) And 
     SqlFunctions.DatePart("m", dte1) = SqlFunctions.DatePart("m", dte2) And 
     SqlFunctions.DatePart("d", dte1) = SqlFunctions.DatePart("d", dte2)

次に、他のクエリ内で:

Dim qry = entities.Works.Where(Function(w) w.JobID = 
    RecordID And SqlDateEquals(w.FromDate, dte))

私の理解では、LINQ-to-Entities は に渡された式を解析し、式の一部としても.Where認識できるはずです。SqlFunctions.DatePartしたがって、を含む式はSqlFunctions.DatePart、同等の SQL に解析可能である必要があります。

これどうやってするの?

4

2 に答える 2

0

EntityFunctions.TruncateTimeを使用します。

Dim datePart = dte.Date
Dim qry = entities.Works.Where(Function(w) w.JobID = RecordID And _
    TruncateTime(w.FromDate) = datePart)

注:これは質問の答えにはなりませんが、問題は解決します。

于 2013-08-22T19:31:00.633 に答える