DateTime値を取得しようとしていますが、nullでない場合はShort Time Stringを返します。なぜ、null可能なDateTimeをLinQクエリの文字列としてキャストできないのですか?
var times = from t in db.TimePostings
where t.MemberID == member.MemberID
select new
{
Date = t.TimeIn.ToShortDateString(),
TimeIn = t.TimeIn.ToShortTimeString(),
TimeOut = t.TimeOut.HasValue ? t.TimeOut.Value.ToShortTimeString() : "-------"
};
gvTimePostings.DataSource = times;
gvTimePostings.DataBind();
(タイムアウトがNULLABLEであるのに対し、TimeInがNULL可能でない)が、私はエラーでデータバインドしようとすると、これが失敗 :
Could not translate expression 'Table(TimePosting).Where(t => (t.MemberID == Invoke(value(System.Func
1[System.String])))).Select(t => new <>f__AnonymousType8
4(Date = t.TimeIn.ToShortDateString(), TimeIn = t.TimeIn.ToShortTimeString(), TimeOut = IIF(t.TimeOut.HasValue, (t.TimeOut ?? Invoke(value(System.Func`1[System.DateTime]))).ToShortTimeString(), "-------"), Hours = ""))' into SQL and could not treat it as a local expression.
は私も同様のエラーを取得する私のクエリは次のようになりますしかし
TimeOut = t.TimeOut.HasValue ? Convert.ToDateTime(t.TimeOut).ToShortTimeString() : "-------"
、私はタイムアウトプロパティを変更した場合::私が使用しようとすると
TimeOut = t.TimeOut.HasValue ? t.TimeOut.ToString() : "-------",
それはうまく動作しますが、私が望むように(shortTimeString)時間をフォーマットしません。
これは何ですか?
"AsEnumerable()"が同じ効果をもたらすと仮定していますジャスティンの応答の "ToList()"と同じです。いずれの方法でも「より良い」使用が可能ですか? –
@ matthew_360:全く同じ効果はありません。ToList()はストリーミングではなく、すべての項目のリストを作成する必要があります。 * times *をバッファリングすることなく複数の場所で使うつもりなら、それは良いことです。そうでなければ、バッファを構築する理由はありません。私は個人的にはAsEnumerableを使います。 'IQueryable'から 'IEnumerable 'に変換します。 –