如何确定IEnumerable是否被评估? [英] How to determine if an IEnumerable has been evaluated?

查看:87
本文介绍了如何确定IEnumerable是否被评估?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道我如何知道我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆