0

私のdbコンテキストに次のクエリがあります

Dim query = (
    From n In db.tblNews
    Join nc In db.tblNewsCategories On n.CatID Equals nc.CategoryID
    Order By n.DateEntered Descending
    Select New With {
      .NewsID = n.NewsID,
      .Title = n.Title,
      .NewsText = n.NewsText,
      .isPublished = n.isPublished,
      .CatID = n.CatID,
      .CategoryName = nc.CategoryName,
      .DateEntered = n.DateEntered,
      .ReadCount = n.ReadCount,
      .DatePublished = n.DatePublish
       }
    )

次に、DropDownListBox の値に従って、WHERE 句を適用して、コードの後半で次のようにデータをフィルター処理します。

If sDate <> "" Then
    query = query.Where(Function(n) n.DateEntered = sDate)
End If

現在、sDate は の形式で提供2013-06-18され、db では対応するDateTimeフィールドが の形式である2013-06-18 16:41:33.973ため、クエリはゼロの結果を返します。

私は次のことをしようとしました:

If sDate <> "" Then
    query = query.Where(Function(n) String.Format(n.DateEntered, {0:yyyy-MM-dd}) = sDate)
End If

エラーが発生しました: LINQ to Entitiesはメソッド「System.String ToString(System.String)」メソッドを認識しません。このメソッドはストア式に変換できません

また、出力をデータベースとまったく同じにしたいので、選択した日付をフォーマットしたくありません。

クエリの where 句で日付をフォーマットするにはどうすればよいですか? できない場合、これに対する解決策はありますか?

4

2 に答える 2

0

試す:

Dim dateStart = DateTime.Parse(sDate)
Dim dateEnd = date.AddDays(1)
query = query.Where(Function(n) n.DateEntered >= dateStart And n.DateEntered < dateEnd)

基本的に、これは、真夜中の日付と翌日の真夜中のDateEntered間であるかどうかを確認します。sDate

于 2013-06-18T19:33:12.800 に答える
0

sDate 変数の形式を変更し (または少なくとも新しい形式でコピーを作成し)、それを LINQ クエリの内容と比較する必要があります。LINQ は .ToString を認識せず、String 値を Date または DateTime 値と比較しようとしています。VB は、この種のものをユーザーから隠すのが本当に苦手なので、自分が何を間違っているのか本当にわかりません。

データベースの .DateEntered 値が Date 型 (DateTime ではない) であると仮定して、これを試してください。

If Not String.IsNullOrWhiteSpace(sDate) Then
    Dim someDate As Date = DateTime.Parse(sDate).Date
    query = query.Where(Function(n) n.DateEntered = someDate)
End If

編集:DateTimeの場合はこれを試してください

If Not String.IsNullOrWhiteSpace(sDate) Then
    Dim someDate As Date = DateTime.Parse(sDate).Date
    query = query.Where(Function(n) n.DateEntered.Date = someDate)
End If
于 2013-06-18T20:01:21.087 に答える