【发布时间】:2014-01-18 15:02:15
【问题描述】:
我正在尝试使用以下 LINQ 查询的结果填充 DataGridView,但是由于某种原因,我打赌错误:
在 mscorlib.dll 中发生“System.NullReferenceException”类型的未处理异常
附加信息:对象引用未设置为对象的实例。
这是查询:
var QueryAverageTime =
from so in tpDB.tblServiceOrders
join sologs in tpDB.tblSOLogs on so.SONumber equals sologs.SONumber
where so.DateClosed >= new DateTime(2014, 01, 13)
where so.DateClosed <= new DateTime(2014, 01, 17)
where sologs.ElapsedHours != 0 || sologs.ElapsedMinutes != 0
group new { sologs.ElapsedHours, sologs.ElapsedMinutes } by sologs.SONumber into g
group new { hours = g.Sum(x => x.ElapsedHours), mins = g.Sum(x => x.ElapsedMinutes) } by "Totals" into t
select new
{
Average = t.Average(x => (x.hours * 60) + x.mins),
Count = t.Count()
};
dgvTimeSLAAverage.DataSource = QueryAverageTime.ToList();
==编辑== 我不知道为什么这个查询在 LINQpad 中运行正常并返回结果时会出现问题。
我已经尝试过改变
dgvTimeSLAAverage.DataSource = QueryAverageTime.ToList();
到
var test = QueryAverageTime.ToList();
但是在 System.Data.Entity.Core.Query 处仍然崩溃。
当我删除 Group By 时查询运行正常
group new { hours = g.Sum(x => x.ElapsedHours), mins = g.Sum(x => x.ElapsedMinutes) } by "Totals" into t
这是抛出的异常:
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.VisitPropertyOp(Op op, Node n, PropertyRef propertyRef, Boolean throwIfMissing)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(PropertyOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.PropertyOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitDefault(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitScalarOpDefault(ScalarOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.Visit(AggregateOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.AggregateOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitDefault(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitAncillaryOpDefault(AncillaryOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.Visit(VarDefOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.VarDefOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(VarDefListOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.VarDefListOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(GroupByIntoOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.GroupByIntoOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(ProjectOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.ProjectOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(ProjectOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.ProjectOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitDefault(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitRelOpDefault(RelOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitApplyOp(ApplyBaseOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.Visit(OuterApplyOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.OuterApplyOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitDefault(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitRelOpDefault(RelOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitApplyOp(ApplyBaseOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.Visit(OuterApplyOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.OuterApplyOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(ProjectOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.ProjectOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfT`1.VisitNode(Node n)
at System.Data.Entity.Core.Query.InternalTrees.BasicOpVisitorOfNode.VisitChildren(Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Visit(PhysicalProjectOp op, Node n)
at System.Data.Entity.Core.Query.InternalTrees.PhysicalProjectOp.Accept[TResultType](BasicOpVisitorOfT`1 v, Node n)
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Process()
at System.Data.Entity.Core.Query.PlanCompiler.NominalTypeEliminator.Process(PlanCompiler compilerState, StructuredTypeInfo structuredTypeInfo, Dictionary`2 tvfResultKeys)
at System.Data.Entity.Core.Query.PlanCompiler.PlanCompiler.Compile(List`1& providerCommands, ColumnMap& resultColumnMap, Int32& columnCount, Set`1& entitySets)
at System.Data.Entity.Core.Query.PlanCompiler.PlanCompiler.Compile(DbCommandTree ctree, List`1& providerCommands, ColumnMap& resultColumnMap, Int32& columnCount, Set`1& entitySets)
at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree, DbInterceptionContext interceptionContext, IDbDependencyResolver resolver, BridgeDataReaderFactory bridgeDataReaderFactory, ColumnMapFactory columnMapFactory)
at System.Data.Entity.Core.EntityClient.Internal.EntityProviderServices.CreateCommandDefinition(DbProviderFactory storeProviderFactory, DbCommandTree commandTree, DbInterceptionContext interceptionContext, IDbDependencyResolver resolver)
at System.Data.Entity.Core.EntityClient.Internal.EntityProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree, DbInterceptionContext interceptionContext)
at System.Data.Entity.Core.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree, DbInterceptionContext interceptionContext)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory.CreateCommandDefinition(ObjectContext context, DbQueryCommandTree tree)
at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlanFactory.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Boolean streaming, Span span, IEnumerable`1 compiledQueryParameters, AliasGenerator aliasGenerator)
at System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__a()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at TigerClaw.frmQuery.btnTimePerTicketQuery_Click(Object sender, EventArgs e) in c:\dev\TigerClaw\TigerClaw\frmQuery.cs:line 1866
【问题讨论】:
-
null是哪个对象? -
我应该提一下,其他基本查询在同一个数据库上运行正常,并且查询在 LINQpad 中返回结果。
-
嗨大卫,它断线了:dgvTimeSLAAverage.DataSource = QueryAverageTime.ToList();不过,在 LINQpad 中运行时,查询确实有结果。当我将“group new { hours = g.Sum(x => x.ElapsedHours), mins = g.Sum(x => x.ElapsedMinutes) } by "Totals" 添加到 t 时,它似乎才开始出现问题在查询中
-
这是一个使用调试器的好机会,它将成为您的软件开发工作中非常有价值的工具。假设您使用的是 Visual Studio,请在此代码中放置一个调试断点,并在其执行时逐行执行。您可以在运行时检查对象的状态,寻找任何不符合预期的行为。
-
异常中的堆栈跟踪还将包含有关异常的有用信息,例如引发异常的特定方法。您还可以将查询分解为多个步骤以进一步隔离问题。我不是想在这里生硬,但您需要检查代码的运行时行为以确定问题。 “它不起作用”和“它崩溃”并不是对问题的有意义描述,这里没有人可以为您调试。
标签: c# linq datagridview