我在项目中广泛使用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()在对象上执行两个不同的获取操作吗?或者按照延迟加载的概念,当执行getData.Count()时,不会执行.ToList的操作。
如果不是这样,那么我应该删除Count条件,这样会提高性能吗?
我正在使用Enterprise Library 5.0访问器方法从数据库中获取数据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>();
现在返回列表。
getData
不是对象列表 - 它是一个查询。调用ToList
会将其转换为对象列表。 - Jon SkeetToList
正是为此而生。一些LINQ提供程序会在上下文中缓存查询结果,但这取决于所涉及的提供程序的详细信息。 - Jon Skeet