foreach循环没有在里面运行代码

时间:2018-06-11 21:58:25

标签: c# .net

我最近被要求查看我们可以搜索的一个C#网络表单,它应该在用户搜索时从我们的数据库返回结果。我通常是节点开发人员,但代码是代码,任务交给我。

我找到了运行代码的方法,并且我看到了这些丑陋的嵌套foreach循环,所以我设置了一些断点,令我惊讶的是,我的一个foreachloops在运行其中的代码之前突破了循环。我认为我找到了它,但我不确定为什么会发生这种情况。

下面是我的完整方法我甚至在foreach循环中放置了一个try / catch,但是没有异常被抛出。所以在我的调试器中说

的部分
foreach (var b in bids)

这个foreach循环中的所有代码都不会执行,我不知道为什么。请有人帮忙

static public object GetData(DataManager value, string customer, string subdivision, string status, string user, string date, string tags, string serviceType, string pricingType)
    {
        var lst = new List<Bid_Master>();

        using (var context = new BiddingDataContext(KP.Common.KPConnectionString))
        {
            context.DeferredLoadingEnabled = false;

            var fdate = DateTime.Parse(date + " 00:00:00");
            var tdate = DateTime.Parse(date + " 23:59:59");

            var bids = context.Bid_Masters
                              .Where(x =>
                                        (x.Customer_ID == customer || customer == "-1") &&
                                        (x.Subdivision_ID == subdivision || subdivision == "-1") &&
                                        (x.Bid_Status == status || status == "-1") &&
                                        (x.Created_By == user || user == "-1") &&
                                        (x.Pricing_Type.ToString() == pricingType || pricingType == "ALL") &&
                                        ((x.Created_Date > fdate && x.Created_Date < tdate) || date == "01/01/2000") &&
                                        (x.Service_Type == serviceType || serviceType == "-1"))
                                .OrderByDescending(x => x.Created_Date);
            try
            {
                foreach (var b in bids)
                {
                    if (String.IsNullOrEmpty(tags))
                        lst.Add(b);
                    else
                    {
                        var arrtags = tags.Split(',');

                        var attrs = context.Bid_Master_Attributes.Where(x => x.BM_ID == b.BM_ID).ToList();

                        foreach (var attr in attrs)
                        {

                            foreach (var t in arrtags)
                            {
                                if (lst.FirstOrDefault(x => x.BM_ID == b.BM_ID) != null) continue;

                                var isDec = false;

                                decimal dVal = 0;
                                if (decimal.TryParse(t, out dVal)) isDec = true;

                                string sVal = t;

                                if ((isDec && attr.TagValueNum.HasValue && attr.TagValueNum == dVal) || sVal == attr.TagValueString)
                                {
                                    lst.Add(b);
                                }
                            }
                        }
                    }
                }
            }
            catch(Exception e)
            {
                Console.WriteLine(e);
            }
        }

        var enumerable = lst.AsEnumerable();
        Syncfusion.JavaScript.DataSources.DataOperations operation = new Syncfusion.JavaScript.DataSources.DataOperations();




        if (value.Sorted != null && value.Sorted.Count > 0)
        {
            enumerable = operation.PerformSorting(enumerable, value.Sorted) as IEnumerable<Bid_Master>;
        }
        if (value.Where != null && value.Where.Count > 0) //Filtering
        {
            enumerable = operation.PerformWhereFilter(enumerable, value.Where, value.Where[0].Operator) as IEnumerable<Bid_Master>;
        }
        int count = enumerable.AsQueryable().Count();
        if (value.Skip != 0) //Paging
        {
            enumerable = operation.PerformSkip(enumerable, value.Skip) as IEnumerable<Bid_Master>;
        }
        if (value.Take != 0)
        {
            enumerable = operation.PerformTake(enumerable, value.Take) as IEnumerable<Bid_Master>;
        }

        return new
        {
            result = enumerable,
            count = count
        };
    }

2 个答案:

答案 0 :(得分:1)

男孩,代码很难看。我发现的唯一的“跳跃”行就是你所描述的(我假设你理解if语句)

 foreach (var t in arrtags)
 {
      if (lst.FirstOrDefault(x => x.BM_ID == b.BM_ID) != null) continue;

continue语句表示:“跳到循环的下一次迭代”。在这种情况下,arrtags中的下一个元素。

如果 all foreach中的代码未运行(不仅仅是其中的一部分),请确保实际填充bids

答案 1 :(得分:0)

出价列表没有任何要循环的项目。尝试直接在数据库中运行查询,并检查是否有任何输出。