Линк | Дата | Вычитание с вопросом соответствия - PullRequest
1 голос
/ 07 августа 2009

Я хочу проверить 1-дневную созданную запись (и), и ниже мой код. моя проблема в том, что он возвращает любую запись, даже если у меня есть совпадение.

И даже я запускаю его на LinqPad, он просто выводит пустой результат.

from x in Users
where (DateTime.Today - x.CreatedDate).ToString().Equals("1.00:00:00")
select x

но когда я пытаюсь удалить "где"

from x in Users
select x

здесь может быть результат ниже, как вы можете видеть, есть 1 совпадения:

ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/6/2009 12:00:00 AM | Result : 1.00:00:00 | Condition : True 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 

NUnit.Framework.AssertionException:   Expected: greater than 0
  But was:  0

Я запускаю это в IQueryable, AddDays и другие не поддерживаются, хотя некоторые посты ниже будут работать на LinqPad, но все еще не поддерживаются IQueryable на c #.

Так может быть решение:

IList<Users> users = new List<Users>();
var qry = from x in Users
select x;
foreach(user in qry)
{
if(!DateTime.Today - x.CreatedDate).ToString().Equals("1.00:00:00")) continue;
users.Add(user);
}
..

Ответы [ 3 ]

1 голос
/ 07 августа 2009

Вы пробовали это без преобразования строки?

from x in Users
where DateTime.Today.Subtract(x.CreatedDate).Equals(New Timespan(1, 0, 0, 0))
select x;

РЕДАКТИРОВАТЬ: Использование Linq для Sql бросит посадки на функции DateTime. Измените ваш выбор, чтобы вы делали вычитание в DateTime, и измените строку, чтобы она выглядела так, как производит SQL Server. Например, я заметил, что мой SQL Server добавляет начальный пробел для дат, поэтому вчерашний день равен "Aug__5_2009_12:00AM": (пробелы изменены на подчеркивание, чтобы вы могли увидеть разницу). Во всяком случае, я получил это для работы в LINQPad против локальной базы данных. Это что-то вроде клуджа, но, кажется, работает.

from x in Users
where x.CheckDate.ToString() == DateTime.Today.AddDays(-1).ToString("MMM dd yyyy hh:mmtt").Replace(" 0", "  ")
select x
0 голосов
/ 09 августа 2011

Нашел лучший ответ в другом вопросе stackoverflow .. перепост для выгоды

Как мне заказать разницу между датой и временем в Linq?

Джеймс Куран написал

Как ни странно, "Subtract ()" не работает, но минус работает. попробовать:

orderby (t.UsedCount / (DateTime.Now - t.CreatedDate.Value) .Days)

(протестировано в LINQPad с использованием базы данных master)

from sp in Spt_monitors
orderby sp.Io_busy / (DateTime.Now - sp.Lastrun).Days
select sp
0 голосов
/ 07 августа 2009

Как насчет

from x in Users where (x.CreatedDate < DateTime.Today.AddDays(1).Date && x.CreatedDate > DateTime.Today.AddDays(-2).Date) select x
...