0

このコード行は例外をスローしています:

Dim z = (From r In t Where 
(DateTime.ParseExact(r.appt_date, "yyyyMMdd", CultureInfo.CurrentCulture).Date.Month _
= myDate.Date.Month) And _ 
(DateTime.ParseExact(r.appt_date, "yyyyMMdd", CultureInfo.CurrentCulture).Date.Day = _
 myDate.Date.Day) And _
(DateTime.ParseExact(r.appt_date, "yyyyMMdd", CultureInfo.CurrentCulture).Date.Year = _
myDate.Date.Year)).ToArray

T は次のように定義されます。

Dim t = (From p In mydb.C_MYTABLE Select p).ToArray

誰かが私が何をしようとしているのか尋ねようとしているので... DBにyyyyMMddとして文字列として保存されている予定日を持っているので、DBを変更できません。アプリレベルで日付ごとにフィルターして並べ替えることができる必要があります。LINQ はクエリ内での変換をサポートしないというのは私の理解ですか?

4

3 に答える 3

0

フィルタリングできるようにする必要があります

sargable でない queryを作成しているようです。

クエリを実行している列を解析する代わりに、探している値に一致する変数を作成することをお勧めします。

dim myDate = DateTime.Now.ToString("yyyyMMdd");

Dim z = (From r In t Where 
  (r.appt_date = myDate)).ToArray

日付順に並べ替えます

DB が値を格納する方法は次のようになります。

20120101  // Jan 01, 2012
20121231  // Dec 31, 2012
20130101  // Jan 01, 2013
20131231  // Dec 31, 2013

自然な文字列の並べ替えは、これらを毎回正しい順序 (昇順、降順) で並べ替えるため、.OrderBy()期待.OrderByDescending()どおりに機能します。

于 2013-09-18T20:31:31.503 に答える