Linq2DB로 작업하는 동안 불쾌한 문제가 발생했습니다. 비교 연산자 ==
및 >=
이 올바르게 작동하지 않습니다. 운영자 <=
이 정상적으로 작동하지만. 처음에는 문제가 Linq To SQLite에 있다고 결론을 내었으므로 github에 문제가 발생했습니다. 그런데 LinqToSql에서 같은 문제가 발견되었습니다.IQueryable. 비교 연산자 (== 및> =)의 특성
클래스 :
[Table(Name = "Records")]
public class Record
{
[Column(Name = "Date"), NotNull]
public DateTime Date { get; set; }
[Column(Name = "Value"), NotNull]
public decimal Value { get; set; }
public override string ToString()
{
return string.Format("{0} - {1}", Date, Value);
}
}
public class Db : LinqToDB.Data.DataConnection
{
public Db() : base("MyDatabase") { }
public ITable<Record> Records { get { return GetTable<Record>(); } }
}
테스트 쿼리 나는 문제를 보여주기 위해 거기에서 코드를 반복 할 수 있습니다
var date = DateTime.ParseExact("14.01.2016", "dd.MM.yyyy", null);
Console.WriteLine("All:");
using (var db = new Db())
{
db.Records
.ToList()
.ForEach(Console.WriteLine);
}
Console.WriteLine("With Date >= {0}", date);
using (var db = new Db())
{
db.Records
.Where(x => x.Date >= date)
.ToList()
.ForEach(Console.WriteLine);
}
인쇄 : IEnumerable을 해결할 수있는 문제에
All:
01.01.2016 0:00:00 - 67
02.01.2016 0:00:00 - 75
03.01.2016 0:00:00 - 70
04.01.2016 0:00:00 - 81
07.01.2016 0:00:00 - 8
08.01.2016 0:00:00 - 27
11.01.2016 0:00:00 - 30
12.01.2016 0:00:00 - 68
13.01.2016 0:00:00 - 20
14.01.2016 0:00:00 - 34
15.01.2016 0:00:00 - 1
16.01.2016 0:00:00 - 66
With Date >= 14.01.2016 0:00:00
15.01.2016 0:00:00 - 1
16.01.2016 0:00:00 - 66
비교 문제 :
Console.WriteLine("With Date >= {0}", date);
using (var db = new Db())
{
db.Records
.ToArray()
.Where(x => x.Date >= date)
.ToList()
.ForEach(Console.WriteLine);
}
인쇄 :
...
With Date >= 14.01.2016 0:00:00
14.01.2016 0:00:00 - 34
15.01.2016 0:00:00 - 1
16.01.2016 0:00:00 - 66
그래서 질문은 다음과 같은 행동의 이유는 무엇인가?
편집 : 문제가 시간 차이가있는 경우
는 왜 SQLite는 관리자의 비교는 정확합니까?
db가 mach와 다른 시간대를 사용하고 있습니까? 그것 qquerying? – Servy
@Servy, 고맙습니다. 그것을 어떻게 확인할 수 있습니까? –
현재 시간을 가져와 시계와 비교할 수있는 쿼리를 작성할 수 있습니다. – Servy