C# 其中返回当前值为Null的WhereListIterator
我使用EntityFramework对DB进行了如下查询:C# 其中返回当前值为Null的WhereListIterator,c#,entity-framework,linq,C#,Entity Framework,Linq,我使用EntityFramework对DB进行了如下查询: var result = this.UnitOfWork.PatientProductGiveRepository.Find(x => x.ProductGroupId == pgId && ( x.ModificationDate != null && DateTime.Compare(x.ModificationDate.Value, la
var result = this.UnitOfWork.PatientProductGiveRepository.Find(x =>
x.ProductGroupId == pgId &&
(
x.ModificationDate != null && DateTime.Compare(x.ModificationDate.Value, lastTime) > 0 ||
DateTime.Compare(x.CreationDate, lastTime) > 0
))
.Result;
下面的一行我正试图只选择几行符合我的datetime需求:
var result2 = result.Where(x =>
0 <= x.GiveDate.Subtract(curTime).TotalHours &&
x.GiveDate.Subtract(curTime).TotalHours < 24);
var result2=result.Where(x=>
0 0Current
在引用类型的任何新创建的迭代器上都为空。更一般地说,对于任何类型的迭代器T
,Current
在第一次调用其MoveNext()
方法之前(或在调用Reset()
之后),最初将等于default(T)
。您可能从未直接调用过MoveNext()
,但当您开始使用foreach
循环枚举迭代器时,在后台会发生这种情况。对LINQ查询调用ToList()
也会产生同样的效果,很可能是因为在其中的某个地方,有一个foreach
循环
对于任何引用类型T
,default(T)
为null
尝试对其进行迭代:
foreach (var x in result2) {
// Stuff
}
您的LINQ查询是“懒惰的”:result2
不是结果的集合。它是一个迭代器,可以根据您的请求生成结果。顾名思义,System.Linq.Enumerable。WhereListIterator
不是集合类型。但即使是这样,该集合的枚举器在您开始枚举它之前仍然没有当前项:
var items = new System.Collections.Generic.List<string> { "one", "two" };
var enumerator = items.GetEnumerator();
Console.WriteLine(enumerator.Current ?? "null");
输出:
Current == (null)
Next Item: Item 0
Next Item: Item 1
Next Item: Item 2
Next Item: Item 3
Current
在引用类型的任何新创建的迭代器上都为null。更一般地说,对于任何类型的迭代器T
,Current
在第一次调用其MoveNext()
方法之前(或调用Reset()
之后),最初将等于default(T)
。您可能从未直接调用过MoveNext()
,但当您开始使用foreach
循环枚举迭代器时,在后台会发生这种情况。对LINQ查询调用ToList()
也会产生同样的效果,很可能是因为在其中的某个地方,有一个foreach
循环
对于任何引用类型T
,default(T)
为null
尝试对其进行迭代:
foreach (var x in result2) {
// Stuff
}
您的LINQ查询是“懒惰的”:result2
不是结果的集合。它是一个迭代器,可以根据您的请求生成结果。顾名思义,System.Linq.Enumerable。WhereListIterator
不是集合类型。但即使是这样,该集合的枚举器在您开始枚举它之前仍然没有当前项:
var items = new System.Collections.Generic.List<string> { "one", "two" };
var enumerator = items.GetEnumerator();
Console.WriteLine(enumerator.Current ?? "null");
输出:
Current == (null)
Next Item: Item 0
Next Item: Item 1
Next Item: Item 2
Next Item: Item 3
您在第一段中是指引用类型,而不是值类型。@Evk-Ulp。谢谢!您在第一段中是指引用类型,而不是值类型。@Evk-Ulp。谢谢!