将linq查询或foreach循环转换为可以等待的表单

时间:2014-09-29 18:02:46

标签: linq entity-framework asynchronous async-await

我正在尝试将我的方法转换为Async。我似乎无法将linq查询或foreach循环转换为可以等待的形式。我在这里读到,EntityFramework + Linq不能异步混合。也许这就是为什么我找不到完全符合我需求的先前问题的原因。有人会关心我指向正确的方向吗?

    private static async Task<decimal> GetLastPriceAsync(string customer, string stockNumber)
    {
        Debug.WriteLine("Get Last Price Called");

        decimal lastCost = 0;
        var lastDate = new DateTime(1900, 1, 1);

        if (string.IsNullOrEmpty(customer))
        {
            Debug.WriteLine("There was no customer");
            return 0;
        }
        Debug.WriteLine("We have a customer");


        if (string.IsNullOrEmpty(stockNumber))
        {
            Debug.WriteLine("There was no item");
            return 0;
        }
        Debug.WriteLine("We have a Part Number");

        try
        {
            IEnumerable<SA_HistoryHeader> orders =
                DContext.SA_HistoryHeader.Local.Where(c => c.strCustomer == customer);

            if (!orders.Any())
            {
                Debug.WriteLine("No order found.");
                return 0;
            }

            Debug.WriteLine("We have previous Orders Found");

            foreach (SA_HistoryHeader thisOrder in orders)
            {
                Debug.WriteLine("Looping through orders.");

                DateTime date = lastDate;

                IEnumerable<SA_HistoryDetail> details = thisOrder.SA_HistoryDetail
                    .Where(i => i.strStock == stockNumber && i.dteLineDate > date && i.bytLineType == 003);

                foreach (
                    SA_HistoryDetail detail in
                        details.Where(detail => detail != null && !string.IsNullOrEmpty(detail.strDescription)))
                {
                    if (detail.dteLineDate != null)
                    {
                        lastDate = (DateTime) detail.dteLineDate;
                    }
                    else
                    {
                        Debug.WriteLine("Order Date was null");
                    }

                    if (detail.curUnitPrice != null)
                    {
                        lastCost = (decimal) detail.curUnitPrice;
                    }
                    else
                    {
                        Debug.WriteLine("Last Cost was null");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Last Price Calc Error: " + ex.InnerException.Message);
        }

        return lastCost;
    }

0 个答案:

没有答案