在我们的应用程序中,我们有一段带有一些 Linq 查询 (EF) 的代码,有时会引发异常。
这仅发生在最终用户身上,到目前为止我们无法重现它。
从日志文件中,我们得到以下异常堆栈跟踪:
1 source) at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable
System.InvalidOperationException:序列在 MT3.uctXGrid.LoadLayout的 System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable1 query, Expression queryRoot) at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression) at System.Linq.Queryable.Count[TSource](IQueryable
1 源)的System.Linq.Enumerable.Single[TSource](IEnumerable 1 序列)中不包含任何元素(字符串 strUniqueID、布尔 rethrowException、List`1 visibleColumns)
在该方法LoadLayout
中,只有 2 个实例Count()
,它们只是在标准IQueryable
s 上运行,它们基于一个整数字段询问实体类型并选择所有字段(没有聚合或任何东西)。
前任:
from p in cxt.genData where datId = ID
在堆栈跟踪中,似乎.Single()
正在使用内部,如果没有记录,可能会引发异常。
但是,如果我们只是调用,为什么要使用 single.Count()
呢?
查询如何
(from p in cxt.genData where datId = ID).Count()
抛出“序列不包含元素”异常?
我们在查询方面也遇到了其他奇怪的问题,我开始怀疑我们的 EF 版本是否有任何问题。
我们目前仍在 4.0 上。(VS2010附带的标准版)。
有没有人知道这里会发生什么?
更新:这是我们实际使用的 Linq-to-Entities 查询
Dim qryLastLayout = From t In oContext.genGridLayouts Where t.layID = intCurrentLayoutID
If Not IsNothing(qryLastLayout) AndAlso qryLastLayout.Count <> 0 Then
Dim qryPrintSettings = From p In oContext.genPrintSettings Where p.prtDefault = True
If Not IsNothing(qryPrintSettings) AndAlso qryPrintSettings.Count <> 0 Then