0

JSON応答にnull許容の日時を表示しようとしています。私のMVCコントローラーでは、次のクエリを実行しています。

var requests = 
    (from r in _context.TestRequests
     where r.scheduled_time == null && r.TestRequestRuns.Count > 0
     select new
     {
       id = r.id,
       name = r.name,
       start = DateAndTimeDisplayString(r.TestRequestRuns.First().start_dt),
       end = r.TestRequestRuns.First().end_dt.HasValue 
                ? DateAndTimeDisplayString(r.TestRequestRuns.First().end_dt.Value)
                : string.Empty
      });

実行するrequests.ToArray()と、次の例外が発生します。

Could not translate expression '
 Table(TestRequest)
   .Where(r => 
    ((r.scheduled_time == null) AndAlso (r.TestRequestRuns.Count > 0)))
   .Select(r => new <>f__AnonymousType18`4(id = r.id, name = r.name, 
          start = value(QAWebTools.Controllers.TestRequestsController).
              DateAndTimeDisplayString(r.TestRequestRuns.First().start_dt), 
          end = IIF(r.TestRequestRuns.First().end_dt.HasValue,
                 value(QAWebTools.Controllers.TestRequestsController).
           DateAndTimeDisplayString(r.TestRequestRuns.First().end_dt.Value),
               Invoke(value(System.Func`1[System.String])))))' 
into SQL and could not treat it as a local expression.

行をコメントアウトするとend =、すべてが正しく実行されているように見えるので、ローカルDateAndTimeDisplayStringメソッドを使用しているようには見えません。したがって、Linq to Sqlは三項演算子が好きではないということだけが考えられますか?以前に三項演算子を使用したことがあると思いますが、このコードベースで使用したのか、別のコードベース(L2SではなくEF4を使用)で使用したのか思い出せません。

これは本当ですか、それとも他の問題がありませんか?

4

2 に答える 2

1

DateAndTimeDisplayStringを変更して、別の引数タイプを受け入れ、次のようなクエリを実行します。

end = DateAndTimeDisplayString(r.TestRequestRuns.FirstOrDefault())

このようにして、コード内で3つの処理を実行できます。

ちなみに、実際にはこの部分が見栄えが悪いです。3値がIIFに変換されて処理されているように見えるため、null文字列を試してみてください。

Invoke(value(System.Func`1[System.String])))))
于 2010-12-30T17:44:35.770 に答える
0

ヌル合体演算の使用を検討しましたか?(??)

コードは次のようになります。

end = r.TestRequestRuns.First().end_dt ?? string.Empty

nullが渡された場合にnullを返すようにDateAndTimeDisplayStringメソッドを変更できます。

于 2010-12-30T17:50:58.387 に答える