データベース内の目的のレコードの開始日と終了日を設定するために使用する2つのdatetimeピッカーがあります。データベースの「日付」は、文字列としてyyyymmdd
の形式で格納されますが、一部の日付に文字がありません(例:2001094、その日の最後の桁が欠落しています)。linq where節で.substringメソッドを安全に使用する方法
私は、関連するタイムスパンのレコードを引っ張る単一LINQクエリを作成したいが、私はちょうどこれを行う場合:彼らので(
var =
from rec in datacontext
where rec.date.substring(0,8) is in the daterange
select rec
を、私は短い弦レコードの範囲の例外から抜け出します長さは8文字ではありません)。
今私はテーブル全体を引っ張り、2つのラムダを使って(1)8個の整数で始まらないすべてのレコードを削除し、次に(2)すべての現在の.substring-safeレコードを削除します。範囲に一致しません。これは動作しますが、実際には醜いです。
where句に2つの条件がある場合、LINQはそれらを順次評価しますか?私は
from ... where (rec.date starts with 8 integers) AND (rec.date is in range)
を言うならば、それは、彼らが最初の条件に合致していない見ているときにLINQは、レコードをスキップしますか?
私は(も一種の醜い)考えることができる唯一の他の事は、最初のLINQクエリで.StartsWith
の代わり.SubString
を使用して、範囲のレコードのうちを削除するには、最初のクエリの後にラムダを使用することです。これは私が今やっているようにすべての行を引っ張るよりも優れていますが、私が探しているエレガントな単一のクエリではありません。
if datetimepickers are both in the same year...
var=from ... where rec.date.startswith(yyyy) 'at least I'm not pulling in everything...
var.remove(lambda to remove short date strings)
var.remove(lambda to remove out of range dates)
を評価しませんこれは、 'DateTime.TryParse'を使用するように叫んでされています。 –