C# 根据查询构造方法,Linq 2实体毫无例外地爆炸出来
如果我运行此查询(单独构建) 当我尝试一个query.ToList()时,它只是爆炸出来(没有到达方法的return语句),没有消息或异常(应用程序仍在运行),但在VS2010中调试时将焦点返回到浏览器,调用方法不会显示/返回任何结果 但是,如果我在一条语句中构造查询,它就可以正常工作,并返回我所期望的941个结果C# 根据查询构造方法,Linq 2实体毫无例外地爆炸出来,c#,entity-framework,linq,linq-to-entities,C#,Entity Framework,Linq,Linq To Entities,如果我运行此查询(单独构建) 当我尝试一个query.ToList()时,它只是爆炸出来(没有到达方法的return语句),没有消息或异常(应用程序仍在运行),但在VS2010中调试时将焦点返回到浏览器,调用方法不会显示/返回任何结果 但是,如果我在一条语句中构造查询,它就可以正常工作,并返回我所期望的941个结果 var query = from s in ctx.Stuff where s.Shipment.Arrivals.FirstOrDefault().Arri
var query = from s in ctx.Stuff
where s.Shipment.Arrivals.FirstOrDefault().ArrivalId == arrivalNo
select new
{
Id = s.Id,
SearchShipment = s.Shipment
};
现在,如果我执行一个query.ToList(),它可以正常工作吗
你知道为什么吗?这把我难住了!我知道在LINQ中外部左连接有点棘手,但这只是一种愚蠢的行为
编辑:我将把“解决方案”放在这里,它会捕捉到前来寻找解决方案的其他人:
我没有向你们自己说明问题的一部分,因为我认为它无关紧要:
Dmg = from d in s.Damages
select d.DamageType.Description + " [" + d.DamageCode.Trim() + "]"
实际上正是这段代码让它工作还是不工作取决于它是如何构造的?!?!?!?!?!?(此代码始终存在,并以一种方式导致问题,但以另一种方式不会导致问题?!)
它抛出了一个无声错误,我只有在LINQPad中运行查询时才发现这个错误(它突出显示了上面子查询的d部分)
对象引用未设置为对象的实例
但是,通过将其更改为使用显式联接,查询现在可以与“在零件中构造”方法配合使用:
Dmg = from d in s.Damages
join dc in ctx.DamageTypes on d.DamageCode equals dc.Code
select d != null ? dc.Description + " [" + dc.Code.Trim() + "]" : string.Empty
正如这首歌所说,多么离奇,多么离奇
另外,考虑到项目时间的限制,我不知道这里可能有一些逻辑。试试这个:
var query = from s in ctx.Stuff
select new
{
Id = s.Id,
SearchShipment = s.Shipment
};
if (searchType == ArrivalNo)
{
var query2 = from s in query
where s.Shipment.Arrivals.FirstOrDefault().ArrivalId == arrivalNo
select s;
query = query2;
}
试试这个:
var query = from s in ctx.Stuff
select new
{
Id = s.Id,
SearchShipment = s.Shipment
};
if (searchType == ArrivalNo)
{
var query2 = from s in query
where s.Shipment.Arrivals.FirstOrDefault().ArrivalId == arrivalNo
select s;
query = query2;
}
由于L2E查询转换(和错误)有很多不同,您使用的是什么EF或EFC版本?您使用变量查询两次,并且对象类型不同,这导致了异常。@IvanStoev v4.0版。30319@jdweng谢谢,但我认为情况并非如此,这是一种常用的部分构造查询的方法。。。e、 g.query=query.Where(x=>x.CallOffNo==CallOffNo);作品fine@IvanStoev是的,卡在4上了,你不必告诉我!,我梦想VS2010升级到VS2017,EF4升级到EF6!:D由于L2E查询转换(和错误)有很多不同,您使用的是什么EF或EFC版本?您使用变量查询两次,并且对象类型不同,这导致了异常。@IvanStoev v4.0版。30319@jdweng谢谢,但我认为情况并非如此,这是一种常用的部分构造查询的方法。。。e、 g.query=query.Where(x=>x.CallOffNo==CallOffNo);作品fine@IvanStoev是的,卡在4上了,你不必告诉我!,我梦想VS2010升级到VS2017,EF4升级到EF6!:D