2010-12-30 9 views
0

JSONレスポンスにnull可能な日付時刻を表示しようとしています。私のMVCコントローラでは、私は次のクエリを実行しています:3進演算子はlinq-to-sqlクエリに有効ではありませんか?

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メソッドの使用ではないようですので、私が考えることができる唯一の事はSqlのLinqは三項演算子を好まないのですか?以前は三項演算子を使っていたと思いますが、このコードベースで実行したか、L2SではなくEF4を使用している別のコードベースで実行したかは分かりません。

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

答えて

1

異なる引数の型を受け入れ、このようなクエリを持っているDateAndTimeDisplayStringを変更します。

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

この方法は、あなたのコード内で三元ものを行うことができます。

Invoke(value(System.Func`1[System.String]))))) 
+0

あなたは正しいです! 'string.empty'を単にヌルに変更しました! – KallDrexx

+0

ラッキーな推測:)あなたはhttp://connect.microsoft.comでこれを報告しなければなりません。 – fejesjoco

0

は、あなたがNull合体operationgを使用して検討している:ところで

は、それは、多分、ヌル文字列を試し、実際に三元は、IIFに変換して処理されるように思われますので、悪いに見えるこの部分です? (??)

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

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

あなたはnullを渡された場合はnullを返すために、あなたのDateAndTimeDisplayString方法を変更することができます。

+0

私は '??'を使うことを考えましたが、end_dtは 'DateTime? 'です。あなたはエラーが発生する?? DateTimeに適用することはできませんか?と文字列。 – KallDrexx

関連する問題