Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据查询构造方法,Linq 2实体毫无例外地爆炸出来_C#_Entity Framework_Linq_Linq To Entities - Fatal编程技术网

C# 根据查询构造方法,Linq 2实体毫无例外地爆炸出来

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

如果我运行此查询(单独构建)

当我尝试一个query.ToList()时,它只是爆炸出来(没有到达方法的return语句),没有消息或异常(应用程序仍在运行),但在VS2010中调试时将焦点返回到浏览器,调用方法不会显示/返回任何结果

但是,如果我在一条语句中构造查询,它就可以正常工作,并返回我所期望的941个结果

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