2009-08-31 36 views
5
  • Cách nhận thời gian trung bình từ trường Ngày giờ qua Khuôn khổ thực thể?
  • Làm cách nào để trừ ngày này sang ngày khác?

Tôi đang nghĩ đến một cái gì đó như:nhận được Thời gian trung bình từ DB và trừ một Ngày từ một số khác

ObjectQuery<Visit> visits = myentitys.Visits; 
      var uQuery = 
      from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes) 
      }; 

để có được thời gian trung bình cư trú của một khách truy cập được phân nhóm theo ngày.

Trả lời

1

Tôi muốn lấy dữ liệu từ cơ sở dữ liệu và sau đó thực hiện chức năng trung bình trong bộ nhớ. Mặc dù tôi không chắc chắn những gì có thể ảnh hưởng đến buổi trình diễn ...

  List<Visit> visits = myentitys.Visits.ToList();//Get the Visits entities you need in memory, 
              //of course,you can filter it here 
      var uQuery = 
      from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Hours = g.Average(visit => (visit.LeaveTime.Value - visit.ArrivalTime.Value).TotalMinutes) 
      }; 

loại này hoạt động số học là không thể dịch trong truy vấn sql (như ngoại lệ nói: đối số DbArithmeticExpression phải có một loại phổ biến số), nhưng có thể với các đối tượng trong bộ nhớ.

Hy vọng điều này sẽ hữu ích.

+1

Tôi cũng thích điều này; bạn không bị ép buộc vào các hàm SQL. Tôi không chắc tại sao bạn bị bỏ phiếu. –

+0

+ 1, @ Kirk +1, tôi muốn cuối cùng biết về máy chủ không phải sql cũng yêu cầu các tùy chọn. – Maslow

7

Đây là cách bạn thực hiện việc này, giả sử cửa hàng sao lưu của bạn là SQL Server. Nhân tiện, tôi đã sửa chữa những gì tôi cho là một lỗi đánh máy - bạn chỉ định tổng số phút vào một trường gọi là Giờ. Tôi đã đổi tên trường thành Phút cho mục đích của các đối tượng trong tương lai.

ObjectQuery<Visit> visits = myentitys.Visits; 
var uQuery = from visit in visits 
      group visit by visit.ArrivalTime.Value.Day into g 
      select new 
      { 
       Day = g.Key, 
       Minutes = g.Average(visit => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("m", visit.LeaveTime.Value, visit.ArrivalTime.Value)) 
      }; 

Thật đáng buồn rằng LINQ to Entities không hỗ trợ chuyển đổi nội tại của DateTime trừ vào một datediff và sau đó tạo ra một đối tượng TimeSpan như một kết quả.

+0

+1 câu trả lời hữu ích. – Maslow

+1

+1 cho "Thật đáng thất vọng khi LINQ to Entities không hỗ trợ chuyển đổi nội tại của DateTime" – billy

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