2015-11-12 63 views
5

Tôi đang triển khai Biểu đồ Telerik với một dữ liệu khổng lồ. Các nhãn trên trục x của biểu đồ chồng chéo nhau. Tôi đã khắc phục vấn đề này nhưng nó không đáng tin cậy trong thời gian dài.Danh sách trả về các giá trị trong khoảng thời gian cho một trường cụ thể

Đây là danh sách các lĩnh vực có:

FieldName    DataType 
Date      DATETIME 
DateString    STRING 
Unit      DOUBLE 
Price     DOUBLE 

X-Axis giá trị nhãn xuất phát từ DateString lĩnh vực

Giải pháp tôi thực hiện

  1. Các MIN và MAX ngày DateString lĩnh vực sẽ luôn luôn trở lại.
  2. Đối với phần còn lại, trả lại những giá trị mà ngày trong tuần là 'Monday'

Đây là số-

// Get min and max Date 
DateTime minDate = DateTime.Now; 
DateTime maxDate = DateTime.Now; 
if (dtGas.Rows.Count > 0) 
{ 
    minDate = Convert.ToDateTime(dtGas.Compute("MIN([Date])", "")); 
    maxDate = Convert.ToDateTime(dtGas.Compute("MAX([Date])", "")); 
} 
// Group by 'Date' and 'DateString' | 'SUM' of Unit and 'Price' 
var qGas = from x in dtGas.AsEnumerable() 
      group x by new 
      { 
       Date = x.Field<DateTime>("Date"), 
       DateString = x.Field<string>("DateString") 
      } into egroup 
      let isOne = egroup.Key.Date.DayOfWeek.ToString() == "Monday" 
      select new 
      { 
       Date = egroup.Key.Date, 
       DateString = minDate == egroup.Key.Date ? 
              (
               egroup.Key.DateString 
              ) : 
              (
               maxDate == egroup.Key.Date ? 
               (
                egroup.Key.DateString 
               ) : 
               ( 
                (isOne) ? 
                (
                 egroup.Key.DateString 
                ) : 
                (" ") 
               )            
              ), 
       Unit = egroup.Sum(r => r.Field<double>("Unit")), 
       Price = egroup.Sum(r => r.Field<double>("Price")), 
      }; 

Giải pháp này giúp trở về không phải tất cả các giá trị nhưng một số trong số họ. Do đó tránh chồng chéo. Nhưng trong tương lai khi dữ liệu phát triển, ngay cả giải pháp này cũng sẽ thất bại.

Giải pháp tôi cần phải thực hiện

Một ý tưởng mà tôi đã suy nghĩ nhưng không biết làm thế nào để thực hiện là-

  1. Các MIN và MAX ngày DateString lĩnh vực sẽ luôn luôn trở lại. [Giống như những gì tôi đang làm ngay bây giờ]
  2. Trả về 8 giá trị trong khoảng thời gian từ ngày MIN và MAX bất kể tổng số mục danh sách.
    2.a. Nhưng nếu Danh sách đếm nhỏ hơn hoặc bằng 8 thì trả về tất cả các giá trị.

Vì vậy, ví dụ: nếu trong Danh sách tôi có 32 giá trị. Nó sẽ trả lại cho tôi tổng 10 giá trị trong trường DateString và phần còn lại sẽ là chuỗi rỗng.

+1

Thật khó để đề xuất giải pháp không có dữ liệu mẫu minh họa ở nơi không thành công – Plutonix

Trả lời

1

tôi muốn đề nghị một cái gì đó như thế này:

public static IList<Stock> GetSome(this IList<Stock> input) 
    { 
     var result = new List<Stock>(); 
     if (input.Count < 8) 
     { 
      return input; 
     } 
     else 
     { 
      var i = 0; 
      for (; i < input.Count; ++i) 
      { 
       if (i % 8 == 0) 
       { 
        result.Add(input[i]); 
       } 
      } 
      if (i % 8 != 0) 
      { 
       result.Add(input.Last()); 
      } 
     } 
     return result; 
    } 

Nếu cổ phiếu đang không ở trong thứ tự thời gian, tôi muốn gọi .Sort() theo ngày trên chúng.

Có thể bạn sẽ muốn thêm bộ sưu tập trống và trống vào mã của mình.

Các vấn đề liên quan