2014-03-04 162 views
1

我剛剛通過switch語句向這行代碼添加了排序功能,但switch語句似乎沒有做任何事情......是否有我錯過了什麼?我有點新手,所以我可能是錯的,我的錯誤可能存在於我的代碼中的其他地方,所以請耐心等待。還有一些關於如何使這一行代碼更高效的建議也會受到歡迎。謝謝。我的switch語句有什麼問題?

 public ProductGetAllActiveResponse GetAllActiveProducts(ProductGetActiveRequest request) 
    { 
     IEnumerable<SalesOrderHeader> salesOrderMatches = DataModel.SalesOrderHeaders 
                    .Where(s => s.CustomerID == request.CustomerId && 
                       s.OrderDate > request.Startdate && 
                       s.OrderDate < request.EndDate); 


     ProductGetAllActiveResponse response = new ProductGetAllActiveResponse(); 

     List<ProductActiveResponse> products = new List<ProductActiveResponse>();  

     foreach (var item in salesOrderMatches) 
     { 
      foreach (var item2 in item.SalesOrderDetails) 
      { 
       var product = DataModel.Products.FirstOrDefault(n => n.ProductID == item2.ProductID); 
       ProductActiveResponse newResponse = new ProductActiveResponse(); 
       newResponse.Color = product.Color; 
       newResponse.DiscontinuedDate = product.DiscontinuedDate; 
       newResponse.ListPrice = product.ListPrice; 
       newResponse.Name = product.Name; 
       newResponse.OrderDate = item.OrderDate; 
       newResponse.ProductId = product.ProductID; 
       newResponse.ProductLine = product.ProductLine; 
       newResponse.ProductModelId = product.ProductModelID; 
       newResponse.ProductNumber = product.ProductNumber; 
       newResponse.Style = product.Style; 
       products.Add(newResponse); 
      } 
     } 

     response.IndexSize = products.Count(); 

     IEnumerable<ProductActiveResponse> test; 

     switch(request.SortMember) 
     { 
      case "ProductId": 
       if (request.SortDirection == 1) 
        test = products.OrderBy(m => m.ProductId); 
       else 
        test = products.OrderByDescending(m => m.ProductId); 
       break; 
      case "ListPrice": 
       if (request.SortDirection == 1) 
        test = products.OrderBy(m => m.ListPrice); 
       else 
        test = products.OrderByDescending(m => m.ListPrice); 
       break; 
      case "Color": 
       if (request.SortDirection == 1) 
        test = products.OrderBy(m => m.Color); 
       else 
        test = products.OrderByDescending(m => m.Color); 
       break; 
      case "OrderDate": 
       if (request.SortDirection == 1) 
        test = products.OrderBy(m => m.OrderDate); 
       else 
        test = products.OrderByDescending(m => m.OrderDate); 
       break; 
      default: 
        test = products.OrderBy(m => m.OrderDate); 
       break; 
     } 


     var trimmedProducts = test.Skip((request.Page - 1) * request.ProductsPerPage).Take(request.ProductsPerPage); 

     foreach (var item in trimmedProducts) 
     { 
      response.ActiveProducts.Add(item); 
     } 

     if (response.ActiveProducts.Count() == 0) 
      response.Success = false; 
     else 
      response.Success = true; 

     return response; 
    } 
+0

'products = products.OrderBy(m => m.OrderDate);' – Jonesopolis

回答

5

OrderBy和OrderByDescending不修改現有集合。它們返回一個新的已排序的IEnumerable,由於它沒有分配給任何東西,所以被丟棄。

你可以做這樣的事情:

IEnumerable<ProductActiveResponse> sortedProducts; 

... 

sortedProducts = product.OrderBy(m => m.OrderDate); 

... 

var trimmedProducts = sortedProducts.Skip((request.Page - 1) * request.ProductsPerPage).Take(request.ProductsPerPage); 
4

的問題是不是switch聲明,但您的OrderBy,而不是使用結果賦給變量。

OrderByOrderByDescending返回一個IEnumerable<T>集合。

變化

products.OrderBy(m => m.OrderDate); 

products = products.OrderBy(m => m.OrderDate); 

,它會工作。