如何确定IEnumerable是否被评估? [英] How to determine if an IEnumerable has been evaluated?
问题描述
我想知道我如何知道我的 IEnumerable< T>
是否已经作为内存中的列表加载(即已被评估)?
I'm wondering how I could tell if my IEnumerable<T>
has been loaded as a list in memory (i.e. has been evaluated)?
我想要这个检查仅查看DateTime的日期部分,我的查询:
I want this check for checking only date portion of DateTime for my query:
private IEnumerable<AccDocumentItem> FilterDocumentItemDateFilter(IEnumerable<AccDocumentItem> accDocumentItems, FilterDocumentDate filterDocumentDate)
{
accDocumentItems =
accDocumentItems.Where(x =>
x.AccDocument.CreateDate >= filterDocumentDate.FromDocumentDate &&
x.AccDocument.CreateDate <= filterDocumentDate.ToDocumentDate);
}
我知道在 LinqToEntity
我们可以使用 EntityFunctions.TruncateTime
,显然在 LinqToObject
中,我们可以获取日期部分 DateTime
但问题是我不知道我的 IEnumerable
是否已被执行?
I know that in LinqToEntity
we can use EntityFunctions.TruncateTime
and obviously in LinqToObject
we can get date portion of DateTime
but the problem is that I don't know if my IEnumerable
has been executed or not?
编辑:
我想要这样做:
I wanted do this:
private IEnumerable<AccDocumentItem> FilterDocumentItemDateFilter(IEnumerable<AccDocumentItem> accDocumentItems, FilterDocumentDate filterDocumentDate)
{
if(accDocumentItems as IList<AccDocumentItem> != null)
{
accDocumentItems =
accDocumentItems.Where(x =>
x.AccDocument.CreateDate.Date >= filterDocumentDate.FromDocumentDate &&
x.AccDocument.CreateDate.Date <= filterDocumentDate.ToDocumentDate);
}
else
{
accDocumentItems =
accDocumentItems.Where(x =>
EntityFunctions.TruncateTime(x.AccDocument.CreateDate) >= filterDocumentDate.FromDocumentDate &&
EntityFunctions.TruncateTime(x.AccDocument.CreateDate) <= filterDocumentDate.ToDocumentDate);
}
}
(谢谢Tim Schmelter;)
(Thank you Tim Schmelter ;)
推荐答案
您可以尝试使用 as
operator :
You can try to cast it with the as
operator:
IList<TSource> list = source as IList<TSource>;
if (list != null)
{
// it is a list or array
}
这篇关于如何确定IEnumerable是否被评估?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!