我有几个使用Entity Framework的简单数据库查询,我想使用Lazy<T>
加载一次,但是我可以看到每次调用该属性时都会执行查询。我尝试过的变化是:
public static IEnumerable<string> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name)).Value;
public static IEnumerable<string> Foos=> new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray()).Value;
public static Lazy<IEnumerable<string>> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());
public static IEnumerable<string> LightingEnvironments
{
get
{
var lazy = new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());
return lazy.Value;
}
}
最佳答案
每次调用属性getter时都在构造一个新的Lazy
。 Lazy
仅当您保留Lazy
实例并在每次需要该值时在同一Value
实例上调用Lazy
属性时,才允许您重新使用已构造的值。
关于c# - 为什么Lazy <T>不懒惰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45444420/