我有一系列的linq
_cache = _repository.EntitiesNoTracking().Select(k => Crypto.DecryptString(k.KeyValue)).ToHashSet();这当然不起作用,因为Linq-to-entities不知道Crypto.DecryptString。所以解决方案可能是
_cache = _repository.EntitiesNoTracking().ToArray().Select(k => Crypto.DecryptString(k.KeyValue)).ToHashSet();然而,这里面似乎有一个冗余的ToArray()。我想下一段代码会更高效:
var _cache = new HashSet<string>();
foreach(var item in _repository.EntitiesNoTracking()){
_cache.Add(Crypto.DecryptString(item.KeyValue));
}有没有什么方法可以告诉Linq- to -entities转换成普通的linq,而不需要额外的步骤?
发布于 2021-02-05 17:26:10
您不需要EntitiesNoTracking(),因为您有自定义投影。此外,检索到的数据应该受到附加Select的限制。
_cache = _repository.
.Select(k => k.KeyValue)
.AsEnumerable()
.Select(s => Crypto.DecryptString(s))
.ToHashSet();https://stackoverflow.com/questions/66060558
复制相似问题