0

EventTypeID に基づいてすべてのイベントを返すメソッドがあります。

 public IList<Event> FindAll(int eventTypeId, DateTime? modifiedSince)
        {
            IQueryable<Event> query = this.SessionFactory.Session.Query<Event>().Where(e => e.EventType.Id == eventTypeId);

            if (modifiedSince.HasValue)
            {
                // .ToUniversalTime() call throws NotSupportedException
                query = query.Where(et => et.ModifiedDate.ToUniversalTime() >= modifiedSince.Value);
            }

            return query.ToList();
        }

上記のように、レコードごとに .ToUniversalTime() メソッドを呼び出す方法は?

理想的には、最初に .ToList() を呼び出してからフィルターをかけたくありません。

まったくサポートされていない場合、LINQ を NHibernate に拡張してこの特定の機能をサポートするにはどうすればよいですか?

4

1 に答える 1

1

取得しているデータの行には異なるタイム ゾーンの時刻が含まれていると予想されるため、これを解決するのは少し難しいかもしれません。

この問題は、et.ModifiedDate.ToUniversalTime() 呼び出しがクエリに渡され、クエリのターゲットがその操作をサポートしていないために発生します (これが、コンパイル時ではなく実行時に表示される理由です)。

これを回避するには、通常、クエリ ブロックの外部で必要な計算を実行し、その値を渡します。

テストを実行する別の方法を検討する必要があります。

于 2013-06-12T15:16:38.170 に答える