以下の LINQ ステートメントの where 句は、'logLevel' の値が "Error" の場合に次のエラーを引き起こします。
- エラー メッセージ = コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。
- 内部例外 = p_linq_2 : 文字列の切り捨て: max=3、len=5、value='Error'
に変更&& (logLevel == "All" || logLevel == "Error")
すると&& (logLevel == "Error")
、エラーは発生しなくなりました。
「すべて」との比較を行うために、LINQ は最初に「logLevel」の値を 3 文字に切り捨てようとしますか?
ここで何が起こっているのですか?
(MVC 4、SQL CE 4 を実行しています)
IQueryable<LogEvent> list = (from a in _context.ELMAH_Error
where a.TimeUtc >= start && a.TimeUtc <= end
&& (logLevel == "All" || logLevel == "Error")
select new LogEvent
{
IdType = "guid", Id = "",IdAsInteger = 0,IdAsGuid = a.ErrorId,LoggerProviderName = "Elmah",LogDate = a.TimeUtc,MachineName = a.Host,Message = a.Message,Type = a.Type,Level = "Error",Source = a.Source,StackTrace = ""
});