gpt4 book ai didi

c# - 如何测试我的 Linq IQueryable 是否已执行

转载 作者:行者123 更新时间:2023-11-30 18:11:10 26 4
gpt4 key购买 nike

我目前正在使用 Linq to NHibernate(虽然这不是这个问题的问题)对我的数据库执行查询,我希望能够测试当前的 IQueryable 结果实例是否是否已执行。

调试器知道我的 IQueryable 还没有被“调用”,因为它告诉我扩展 Results 属性将“枚举”它.有没有办法让我以编程方式识别它。

我希望这是有道理的:)

最佳答案

像这样编写一个 IQueryable 包装器如何:

class QueryableWrapper<T> : IQueryable<T>
{
private IQueryable<T> _InnerQueryable;
private bool _HasExecuted;

public QueryableWrapper(IQueryable<T> innerQueryable)
{
_InnerQueryable = innerQueryable;
}

public bool HasExecuted
{
get
{
return _HasExecuted;
}
}

public IEnumerator<T> GetEnumerator()
{
_HasExecuted = true;

return _InnerQueryable.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

public Type ElementType
{
get { return _InnerQueryable.ElementType; }
}

public System.Linq.Expressions.Expression Expression
{
get { return _InnerQueryable.Expression; }
}

public IQueryProvider Provider
{
get { return _InnerQueryable.Provider; }
}
}

然后你可以像这样使用它:

var query = new QueryableWrapper<string>(
from str in myDataSource
select str);

Debug.WriteLine("HasExecuted: " + query.HasExecuted.ToString());

foreach (string str in query)
{
Debug.WriteLine(str);
}

Debug.WriteLine("HasExecuted: " + query.HasExecuted.ToString());

输出是:


字符串0
字符串 1
...
是的

关于c# - 如何测试我的 Linq IQueryable 是否已执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com