我在我的项目中广泛使用Linq,到目前为止性能都很好,我只有一个疑问,如果我使用Linq这样的话
var getData = objData.where(obj => obj.isDelete ==false)
if (getData != null && getData.Count() > 0)
foreach(xyz as obj in getdata.ToList())
{
//some operation
}
getData.Count()和getdata.ToList()是否对对象执行两次不同的提取?或者根据deffer加载概念执行getData.Count()时,不会对.ToList执行任何操作。
如果没有,那么我应该删除计数条件,它会改善性能吗?
我正在使用Enterprise Library 5.0 acessor方法从DB获取数据 列出lstpack = new List();
var accessor = _sqlDatabase.CreateSprocAccessor<PackageForClient>("PackageForClientApp", MapBuilder<PackageForClient>
.MapAllProperties()
.Build()
);
var Data = accessor.Execute(startdate, enddate,beinh);
if (Data != null) //&& Data.Count() > 0 //This has been removed as it is doing an extra fetch
lstpack = Data.ToList<PackageForClient>();
现在返回列表
答案 0 :(得分:13)
我们很难确定,因为我们不知道getData
是什么,但是:
Any()
代替Count() > 0
;它可以更高效,特别是在LINQ to Objects ToList
在空的时候相对便宜 - 只需如果你需要一个列表Where
永远不会返回null 换句话说,我可能会写:
foreach (Obj xyz in objData.Where(obj => !obj.isDelete))
{
//some operation
}