C# 返回页面列表时的EntityCommandExecutionException

C# 返回页面列表时的EntityCommandExecutionException,c#,asp.net-mvc-4,sql-server-ce,elmah,C#,Asp.net Mvc 4,Sql Server Ce,Elmah,Edit:我已经解决了原来的问题,但它引出了另一个问题 问题出在这条线路上 && (logLevel == "All" || logLevel == "Error") && (logLevel == "All" || logLevel == "Error") “列表”中的LINQ查询生成以下SQL SELECT 0 AS [C1], N'guid' AS [C2], [Extent1].[ErrorId] AS [ErrorId], [Extent1]

Edit:我已经解决了原来的问题,但它引出了另一个问题

问题出在这条线路上

&& (logLevel == "All" || logLevel == "Error")
&& (logLevel == "All" || logLevel == "Error")
“列表”中的LINQ查询生成以下SQL

SELECT 
0 AS [C1], 
N'guid' AS [C2], 
[Extent1].[ErrorId] AS [ErrorId], 
[Extent1].[TimeUtc] AS [TimeUtc]
FROM [ELMAH_Error] AS [Extent1]
WHERE ([Extent1].[TimeUtc] >= @p__linq__0) AND ([Extent1].[TimeUtc] <= @p__linq__1) AND ((N'All' = @p__linq__2) OR (N'Error' = @p__linq__3)) 
SELECT 
0 AS [C1], 
N'guid' AS [C2], 
[Extent1].[ErrorId] AS [ErrorId], 
[Extent1].[TimeUtc] AS [TimeUtc]
FROM [ELMAH_Error] AS [Extent1]
WHERE ([Extent1].[TimeUtc] >= @p__linq__0) AND ([Extent1].[TimeUtc] <= @p__linq__1) AND ((N'All' = @p__linq__2) OR (N'Error' = @p__linq__3)) 
当我从LINQ查询中删除logLevel==“All”时,错误消失了

所以,我现在的问题是-为什么LINQ/SQL试图截断p_LINQ___2?它正在进行比较。。。为什么需要截断?


原始问题

我正在将Elmah和Log4Net与我现有的MVC应用程序集成(遵循本指南-)。我使用的是SQLCE4。已处理和未处理的错误正在记录到数据库中,我遇到的问题是查看错误的UI

我得到一个由此行触发的EntityCommandExecutionException(下面列出了完整的方法)

链式方法

public IQueryable<LogEvent> GetByDateRangeAndType(int pageIndex, int pageSize, DateTime start, DateTime end, string logLevel)
    {
        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 = ""
                                     });

        return list;
    }
public IQueryable GetByDateRangeAndType(int-pageIndex、int-pageSize、DateTime开始、DateTime结束、字符串日志级别)
{
IQueryable list=(来自于一个in_context.ELMAH_错误

其中a.TimeUtc>=start&&a.TimeUtc我已经解决了我的问题,尽管它会引发另一个问题

问题出在这条线路上

&& (logLevel == "All" || logLevel == "Error")
&& (logLevel == "All" || logLevel == "Error")
“列表”中的LINQ查询生成以下SQL

SELECT 
0 AS [C1], 
N'guid' AS [C2], 
[Extent1].[ErrorId] AS [ErrorId], 
[Extent1].[TimeUtc] AS [TimeUtc]
FROM [ELMAH_Error] AS [Extent1]
WHERE ([Extent1].[TimeUtc] >= @p__linq__0) AND ([Extent1].[TimeUtc] <= @p__linq__1) AND ((N'All' = @p__linq__2) OR (N'Error' = @p__linq__3)) 
SELECT 
0 AS [C1], 
N'guid' AS [C2], 
[Extent1].[ErrorId] AS [ErrorId], 
[Extent1].[TimeUtc] AS [TimeUtc]
FROM [ELMAH_Error] AS [Extent1]
WHERE ([Extent1].[TimeUtc] >= @p__linq__0) AND ([Extent1].[TimeUtc] <= @p__linq__1) AND ((N'All' = @p__linq__2) OR (N'Error' = @p__linq__3)) 
当我删除LINQ查询中的logLevel==“All”frmo时,错误消失了

我的下一个问题是-为什么LINQ/SQL试图截断p_LINQ___2?它正在执行比较…为什么需要截断

(N'All' = @p__linq__2)