Подтвердить что ты не робот

Linq where clause сравнивает только значение даты без значения времени

var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
        && x.DateTimeValueColumn <= DateTime.Now)
    .Select(x => x);

Верхний запрос работает правильно.
Но я хочу проверить только значение даты.
Но верхняя контрольная дата запроса + значение времени.

В традиционном mssql я мог бы написать запрос, как показано ниже.

SELECT * FROM dbo.tbl_MyTable
WHERE 
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) <= 
            CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
AND
Active = 1

Так может ли кто-нибудь дать мне предложение, как я могу проверить только значение даты в Linq.

4b9b3361

Ответ 1

В EF 6.0 также есть EntityFunctions.TruncateTime или DbFunctions.TruncateTime.

Ответ 2

Простой подход к этой проблеме для сравнения только даты даты

var _My_ResetSet_Array = _DB
                    .tbl_MyTable
                    .Where(x => x.Active == true && 
                               x.DateTimeValueColumn.Year == DateTime.Now.Year
                            && x.DateTimeValueColumn.Month == DateTime.Now.Month
                            && x.DateTimeValueColumn.Day == DateTime.Now.Day);

Поскольку тип данных Date не поддерживается linq для сущности, где Year, Month и Day являются типами данных 'int' и поддерживаются.

Ответ 3

ИЗМЕНИТЬ

Чтобы избежать этой ошибки: указанный тип member 'Date' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности.

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true)
                         .Select(x => x).ToList();

 var filterdata = _My_ResetSet_Array
        .Where(x=>DateTime.Compare(x.DateTimeValueColumn.Date, DateTime.Now.Date)  <= 0 );

Требуется вторая строка, поскольку LINQ to Entity не может преобразовать свойство даты в sql-запрос. Поэтому лучше сначала извлечь данные, а затем применить фильтр даты.

ИЗМЕНИТЬ

Если вы просто хотите сравнить значение даты даты, чем использовать

DateTime.Date Свойство - Получает компонент даты этого экземпляра.

Код для вас

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true
     && DateTime.Compare(x.DateTimeValueColumn.Date, DateTime.Now.Date)  <= 0 )
                         .Select(x => x);

Если это так, то используйте

Метод DateTime.Compare - сравнивает два экземпляра DateTime и возвращает целое число, указывающее, является ли первый экземпляр более ранним, чем, или позже второго экземпляра.

Код для вас

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true
                  && DateTime.Compare(x.DateTimeValueColumn, DateTime.Now)  <= 0 )
                         .Select(x => x);

Пример

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

Ответ 4

 result = from r in result where (r.Reserchflag == true && 
    (r.ResearchDate.Value.Date >= FromDate.Date && 
     r.ResearchDate.Value.Date <= ToDate.Date)) select r;

Ответ 5

&& x.DateTimeValueColumn <= DateTime.Now

Это поддерживается, если ваша схема верна.

&& x.DateTimeValueColumn.Value.Date <=DateTime.Now

Ответ 6

В аналогичном случае я использовал следующий код:

DateTime upperBound = DateTime.Today.AddDays(1); // If today is October 9, then upperBound is set to 2012-10-10 00:00:00
return var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
        && x.DateTimeValueColumn < upperBound) // Accepts all dates earlier than October 10, time of day doesn't matter here
    .Select(x => x);

Ответ 7

Рабочий код:

     {
        DataBaseEntity db = new DataBaseEntity (); //This is EF entity
        string dateCheck="5/21/2018";
        var list= db.tbl
        .where(x=>(x.DOE.Value.Month
              +"/"+x.DOE.Value.Day
              +"/"+x.DOE.Value.Year)
             .ToString()
             .Contains(dateCheck))
     }

Ответ 8

Попробуйте это,

var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
         && x.DateTimeValueColumn <= DateTime.Now)
    .Select(x => x.DateTimeValueColumn)
    .AsEnumerable()
    .select(p=>p.DateTimeValueColumn.value.toString("YYYY-MMM-dd");

Ответ 9

Используйте mydate.Date для работы с частью даты только класса DateTime.