我在我的项目中广泛使用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
}
Run Code Online (Sandbox Code Playgroud)
getData.Count()和getdata.ToList()对对象执行两次不同的提取吗?或者根据deffer加载概念执行getData.Count()时,不会对.ToList执行任何操作.
如果没有,那么我应该删除计数条件,它会改善性能吗?
我正在使用Enterprise Library 5.0 acessor方法从DB List中获取数据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>();
Run Code Online (Sandbox Code Playgroud)
现在返回列表
Jon*_*eet 13
我们很难确定,因为我们不知道是什么getData,但是:
Any()而不是Count() > 0; 它可以更高效,特别是在LINQ to Objects中ToList将是相对便宜的,当它是空的-只要做到这一点,如果你需要一个列表Where 永远不会返回null换句话说,我可能写道:
foreach (Obj xyz in objData.Where(obj => !obj.isDelete))
{
//some operation
}
Run Code Online (Sandbox Code Playgroud)