2011-11-11 17 views
5

Kiedy mam rok przestępny w mojej bazie danych (np .: 29 lutego 2012). Funkcje EntityFunctions.CreateDateTime rzuca System.Data.SqlClient.SqlException: Conversion failed when converting date and/or time from character string.Problem EntityFunctions.CreateDateTime ze skokiem Rok w linq do encji

mój kod wygląda następująco w moim asp.net MVC (C#) Zastosowanie:

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 
}; 

Tutaj _userStartDate, _userEndDate, _gMTStartDate i _gMTEndDate są parametry z mojej funkcji.

Jeśli kolumna "Is_Include_Time" ma wartość true, to muszę uwzględnić także TimeSpan z tabeli. Ale za rok przestępny Rzuca błąd.

Wszelkie sugestie?

Odpowiedz

0

spróbować użyć zmiennej zadeklarowanej poza wyrażenia linq jak zasugerowałem here

+1

Jego nie będzie działać w moim przypadku, bo muszę porównać wraz z datą i godziną w baza danych. Jakieś inne alternatywy? – Prasad

2

prostu napotkał ten sam problem. Mam pewne wartości w wierszach bazy danych, które muszę przekonwertować na datetime. Dowiedziałem się, że mogę użyć następującego konstruktu:

  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 
          }; 

Nie jestem pewien wpływu na wydajność, ale działa.

poważaniem, Tor-Odd

0

ten sposób, że mam do czynienia z

var minDate = Convert.ToDateTime("1900-01-01 00:00:00"); 
return source.Where(x => EntityFunctions.DiffDays(x.ReviewedDate, minDate) > 0).ToList(); 
Powiązane problemy