Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# EntityFramework在声明和使用变量之前是否监视变量?_C#_Linq_Entity Framework_Entity Framework 6_Linq To Objects - Fatal编程技术网

C# EntityFramework在声明和使用变量之前是否监视变量?

C# EntityFramework在声明和使用变量之前是否监视变量?,c#,linq,entity-framework,entity-framework-6,linq-to-objects,C#,Linq,Entity Framework,Entity Framework 6,Linq To Objects,当我使用Linq时,我无法理解发生了什么。任何检查对象是否包含特定值的方法,代码都会在使用前对带有数据的变量抛出NullReferenceException 代码如下: public ML.Order FetchOrder(ML.MLDBContext db, long OrderID) { if (db == null) db = new ML.MLDBContext();

当我使用Linq时,我无法理解发生了什么。任何检查对象是否包含特定值的方法,代码都会在使用前对带有数据的变量抛出NullReferenceException

代码如下:

        public ML.Order FetchOrder(ML.MLDBContext db, long OrderID)
        {
            if (db == null)
                db = new ML.MLDBContext();            

           //avoided code to fetch the Order details from another system via API

            Order apiOrder = api.OrdersGet(OrderID);

            //avoided code to test null results

            bool isNew = false; //to check if fetched order is new or must be updated on DB

            //load from DB
            ML.Order dbOrder = db.Orders.Where(o => o.OrderID == apiOrder.id).FirstOrDefault();
            if (dbOrder == null)
            {
                isNew = true;

                //avoided code to fill dbOrder with apiOrder data

                //Below code check if user bought the same product before

                //the error is thrown here but it's not null
                string ListingID = apiOrder.order_items.First().item.id; 
                var previousOrders = db.Orders.Where(order => order.OrderID != apiOrder.id && order.CustomerID == apiOrder.buyer.id && order.SellerID == apiOrder.seller.id).ToList();

                foreach (ML.Order prevOrder in previousOrders)
                {
                    if (prevOrder.OrderedItems.Any(i => i.ListingID == ListingID)) //Line who causes the error
                    {
                          //code to mask as reordered item
                    }
                }
有几点:

我确信apiOrder.order\u items.First.item.id始终具有任何值

我确信订单包含我要查找的项目,并且字段不可为空

当我注释导致错误的行时,调试将顺利通过

为了解决这个问题,我不得不用foreach替换Linq.Any

我的疑问是: Linq.Any或EntityFramework在声明和使用变量之前是否监视变量

为什么在使用变量之前对其执行NullreferenceException


使用Linq有什么问题?有没有方法检查EF对象中是否存在值?

当prevOrder.OrderedItems为空时会发生什么?你的例外发生了。。。因此,如果prevOrder.OrderedItems!=null&&prevOrder.OrderedItems.Anyi=>…可能的@entropic prevOrder.OrderedItems副本将永远不会为null,我只使用Itens创建订单,在这种情况下,OrderedItems不是null或空的,它的值计数始终为1@paqogomez不是同一个问题,我在你的笔记说错误发生在if行之前检查了这个!?!?!我们又来了。订单是否为空?订单项是否为空?First.Item是否为空?ListingID返回空值吗?其中一个是空的。它不是EF,也不是任何
        foreach (ML.Order prevOrder in previousOrders)
        {
            foreach (ML.OrderedItem item in prevOrder.OrderedItems)
            {
                if (item.ListingID == ListingID)
                {
                     //code to mask as reordered item
                }
            }

        }