17

私は、datetimeフィールドのdate部分だけでLinqグループをやろうとしています。

このlinqステートメントは機能しますが、日付と時刻でグループ化されています。

var myQuery = from p in dbContext.Trends
          group p by p.UpdateDateTime into g
          select new { k = g.Key, ud = g.Max(p => p.Amount) };

この文を実行して日付だけでグループ化すると、次のエラーが発生します。

var myQuery = from p in dbContext.Trends
          group p by p.UpdateDateTime.Date into g   //Added .Date on this line
          select new { k = g.Key, ud = g.Max(p => p.Amount) };

指定された型メンバー 'Date'は、LINQ to Entitiesではサポートされていません。 初期化子、エンティティメンバ、およびエンティティナビゲーションプロパティのみがサポートされています。

日付と時刻ではなく、日付でグループ化するにはどうすればよいですか。


  • 同じ正確なコードがLinq to SQLで機能するのでそれは奇妙です! - azamsharp

3 답변


32

使用EntityFunctions.TruncateTime方法:

var myQuery = from p in dbContext.Trends
          group p by EntityFunctions.TruncateTime(p.UpdateDateTime) into g
          select new { k = g.Key, ud = g.Max(p => p.Amount) };


  • これはうまくいきます。それはまた働く他の解決策より少しきれいです。ありがとうございます。 - twamn
  • 異なるタイムゾーンが使用されている場合を除き、すべての場合に機能します。その後、グループ化もタイムゾーンで行われます。 Iveがここで悪い解決策を投稿していて、コードをきれいにするために助けを求めています:日付(日)によるエンティティグループへの.NET LINQ - Zeezer
  • ありがとう。私は何日もこれを探していました。あなたは男だ - Dudipoli

5

考えられる解決策ここにこれは次のパターンに従います。

var q = from i in ABD.Listitem
    let dt = p.EffectiveDate
    group i by new { y = dt.Year, m = dt.Month, d = dt.Day} into g
    select g;

だから、あなたのクエリ[未テスト]の場合:

var myQuery = from p in dbContext.Trends
      let updateDate = p.UpdateDateTime
      group p by new { y = updateDate.Year, m = updateDate.Month, d = updateDate.Day} into g
      select new { k = g.Key, ud = g.Max(p => p.Amount) };


  • これは1つの小さなモッズで動作します。 「〜に」 3行目の末尾に追加する必要があります。ありがとうございます。 - twamn
  • しかし、私はあなたがEF 4.0を使っているのであれば、解決策がより良い解決策であると思うだろう。以前はEntityFunctionsユーティリティを知らなかった。 - Pero P.

0

使えないDateTime.DateLinq-to-Entitiesクエリで。明示的にフィールドでグループ化するか、またはDateデータベース内のフィールド。 (私は同じ問題を抱えていた - 私は使用したDateデータベース内のフィールド。

リンクされた質問


関連する質問

最近の質問