1

次のコードの CA1506 コード分析警告に直面しています

private void ShowProductStatistics(object obj)
    {
        this.currentProduct = obj as Products;
        Task.Factory.StartNew(() =>
        {
            var topOrderQuery = (from orderDetail in new XPQuery<OrderDetails>(new Session())
                                 where
                                     orderDetail.ProductID.ProductID == currentProduct.ProductID
                                 orderby
                                     (orderDetail.UnitPrice * orderDetail.Quantity) descending
                                 select new TopOrder
                                 {
                                     OrderId = orderDetail.OrderID.OrderID,
                                     TotalSales = orderDetail.UnitPrice * orderDetail.Quantity
                                 }).ToList().Take(10);

            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.TopProduct = topOrderQuery; }));

            var orderPerYearQuery = (from order in new XPQuery<OrderDetails>(new Session())
                                     where order.ProductID.ProductID == currentProduct.ProductID
                                     group order by new { order.OrderID.OrderDate.Year }
                                         into g
                                         select new OrderPYear
                                         {
                                             TotalOrder = g.Count(),
                                             OrderYear = g.Key.Year
                                         }).ToList();
            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.OrderPerYear = orderPerYearQuery; }));

            var salesPerYearQuery = (from order in new XPQuery<OrderDetails>(new Session())
                                     where order.ProductID.ProductID == currentProduct.ProductID
                                     group order by new { order.OrderID.OrderDate.Year }
                                         into g
                                         select new SalesPYear
                                         {
                                             Sales = g.Sum(p => p.UnitPrice * p.Quantity),
                                             Year = g.Key.Year
                                         }).ToList();
            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.SalesPerYear = salesPerYearQuery; }));
        });
    }

msdn に記載されている提案に従ってこの警告を解決しようとしましたが、成功しませんでした。この警告を解決するのを手伝ってくれる人はいますか??

よろしくお願いします、 Rudresh

4

1 に答える 1

3

コードを次のように変更します。

this.currentProduct = obj as Products;
        List<OrderDetails> orderDetailLIst = new XPQuery<OrderDetails>(new Session()).ToList();
        Task.Factory.StartNew(() =>
        {
            var topOrderQuery = (from orderDetail in orderDetailLIst
                                 where
                                     orderDetail.ProductID.ProductID == currentProduct.ProductID
                                 orderby
                                     (orderDetail.UnitPrice * orderDetail.Quantity) descending
                                 select new TopOrder
                                 {
                                     OrderId = orderDetail.OrderID.OrderID,
                                     TotalSales = orderDetail.UnitPrice * orderDetail.Quantity
                                 }).ToList().Take(10);

            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.TopProduct = topOrderQuery; }));

            var orderPerYearQuery = (from order in orderDetailLIst
                                     where order.ProductID.ProductID == currentProduct.ProductID
                                     group order by new { order.OrderID.OrderDate.Year }
                                         into g
                                         select new OrderPYear
                                         {
                                             TotalOrder = g.Count(),
                                             OrderYear = g.Key.Year
                                         }).ToList();
            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.OrderPerYear = orderPerYearQuery; }));

            var salesPerYearQuery = (from order in orderDetailLIst
                                     where order.ProductID.ProductID == currentProduct.ProductID
                                     group order by new { order.OrderID.OrderDate.Year }
                                         into g
                                         select new SalesPYear
                                         {
                                             Sales = g.Sum(p => p.UnitPrice * p.Quantity),
                                             Year = g.Key.Year
                                         }).ToList();
            DispatcherExt.CurrentDispatcher.BeginInvoke(new Action(() => { this.SalesPerYear = salesPerYearQuery; }));
        });

警告の原因は、3回使用していた「from orderDetail in new XPQuery(new Session())」ステートメントであったため、警告が発生していました。カップリングを減らしてみました。

于 2013-10-08T05:53:45.380 に答える