2011-11-11 25 views
5

Khi tôi có một năm nhuận trong cơ sở dữ liệu của tôi (ví dụ: 29 tháng 2 năm 2012). Các chức năng EntityFunctions.CreateDateTime ném System.Data.SqlClient.SqlException: Conversion failed when converting date and/or time from character string.EntityFunctions.CreateDateTime vấn đề với năm nhuận trong linq để thực thể

Mã của tôi là như sau trong MVC asp.net của tôi (C#) ứng dụng:

from u in _entities.tt_Users 
let _start_date = u.Start_Date 
let _startDate = _start_date.Day 
let _startmonth = _start_date.Month 
let _startyear = _start_date.Year 
let _starthour = u.Start_Time.Value.Hours 
let _startminutes = u.Start_Time.Value.Minutes 
let _startseconds = u.Start_Time.Value.Seconds 
let _startDateWithTime = EntityFunctions.CreateDateTime(_startyear, _startmonth, _startDate, _starthour, _startminutes, _startseconds) 
let _startDateWithZeroTime = EntityFunctions.CreateDateTime(_startyear, _startmonth, _startDate, 0, 0, 0) 
let _start_datetime = u.Is_Include_Time ? _startDateWithZeroTime : _startDateWithTime 
let _end_date = u.End_Date 
let _endDate = _end_date.Day 
let _endmonth = _end_date.Month 
let _endyear = _end_date.Year 
let _endhour = u.End_Time.Value.Hours 
let _endminutes = u.End_Time.Value.Minutes 
let _endseconds = u.End_Time.Value.Seconds 
let _endDateWithTime = EntityFunctions.CreateDateTime(_endyear, _endmonth, _endDate, _endhour, _endminutes, _endseconds) 
let _endDateWithZeroTime = EntityFunctions.CreateDateTime(_endyear, _endmonth, _endDate, 0, 0, 0) 
let _end_datetime = u.Is_Include_Time ? _endDateWithZeroTime : _endDateWithTime 
let _cur_Start_date = u.Is_Include_Time ? _userStartDate : _gMTStartDate 
let _cur_End_date = u.Is_Include_Time ? _userEndDate : _gMTEndDate 
where u.User_Id == 1 && !u.Is_Deleted 
&& _start_datetime >= _cur_Start_date && _end_datetime <= _cur_End_date 
select new 
{ 
    u.User_id, 
    u.User_Name, 
    u.Login_Name, 
    u.Email_Address 
}; 

Đây _userStartDate, _userEndDate, _gMTStartDate và _gMTEndDate là các thông số từ chức năng của tôi.

Nếu cột "Is_Include_Time" là đúng, thì tôi cũng phải bao gồm TimeSpan từ bảng. Nhưng đối với năm nhuận nó ném lỗi.

Mọi đề xuất?

Trả lời

0

cố gắng sử dụng một biến khai báo bên ngoài các biểu hiện LINQ như tôi đã gợi ý here

+1

của nó sẽ không làm việc trong trường hợp của tôi, bởi vì tôi cần phải so sánh cùng với ngày và thời gian trong kho dữ liệu. Bất kỳ lựa chọn thay thế nào khác? – Prasad

2

Tôi chỉ gặp phải cùng một vấn đề. Tôi có một số giá trị trong các hàng cơ sở dữ liệu mà tôi cần phải chuyển đổi thành một datetime. Tôi phát hiện ra rằng tôi có thể sử dụng cấu trúc sau:

  DateTime startDate = new DateTime(1, 1, 1); 
      var counters = from counter in entities.Counter 
          let date = SqlFunctions.DateAdd("day", counter.DayOfMonth-1, SqlFunctions.DateAdd("month", counter.Month-1, SqlFunctions.DateAdd("year", counter.Year-1, startDate))) 
          where date >= dateFrom && date <= dateTo 
          orderby date 
          select new 
          { 
           Value = counter.CounterValue, 
           Date = date 
          }; 

Tôi không chắc chắn về tác động hiệu suất, nhưng nó hoạt động.

Trân trọng, Tor-Odd

0

Đây là cách mà tôi đối phó với

var minDate = Convert.ToDateTime("1900-01-01 00:00:00"); 
return source.Where(x => EntityFunctions.DiffDays(x.ReviewedDate, minDate) > 0).ToList(); 
Các vấn đề liên quan