我碰到一個同事的代碼,並認爲這是可能的低效.First()是在linq級別還是在返回的可枚舉集合上運行?
bool any = (from c in listDeviceMaxDate
where c.DeviceKey == m_deviceList[i].deviceKey
select c).Any();
if (!any)
{
latestDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
}
else
{
// from the list we have get the lastest max date from the flow table
DeviceDateTimeItem temp = (from c in listDeviceMaxDate
where c.DeviceKey == m_deviceList[i].deviceKey
select c).First();
latestDate = Convert.ToDateTime(temp.dateTimeMax);
}
我的第一直覺是存儲LINQ查詢,然後就引用它作爲必要的,但後來我意識到,First()
運營商可以防止LINQ從實際獲取無約束查詢將執行的所有行。
如何最初想過重組代碼:
var deviceList = from c in listDeviceMaxDate
where c.DeviceKey == m_deviceList[i].deviceKey
select c;
if (!deviceList.Any())
{
latestDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
}
else
{
// from the list we have get the lastest max date from the flow table
DeviceDateTimeItem temp = deviceList.First();
latestDate = Convert.ToDateTime(temp.dateTimeMax);
}
我的問題是做第二LINQ查詢First()
呼叫阻止其返回的所有結果,因此,它實際上是更快地做到這一點原來的方式?
這是LINQ to SQL的? '在'IEnumerable'上運行的First()'是Linq。 'System.Data.Linq'上的'IQueryable '的First()'是Linq to SQL。 –
2012-07-25 11:16:14