我的模型有:連接到如何將包含多個Linq請求的因子分解?
- 幾個
DeviceStatus
一個強制性Device
- 幾個
Device
連接到一個強制性Panel
當我查詢DeviceStatus
,我需要有連接到它Device
和Panel
在查詢結果中。
... DeviceStatus.Device在查詢結果中爲空。
這裏的LINQ查詢:
using (var actiContext = new ActigraphyContext())
{
var todayStatus =
from s in actiContext.DeviceStatus.Include(s1 => s1.Device.Panel)
where DbFunctions.TruncateTime(s.TimeStamp) == DbFunctions.TruncateTime(DateTimeOffset.Now)
&& s.Device.Panel.Mac == mac
&& (s.Device.Ty == 4 || s.Device.Ty == 9)
select s;
// var tempList = todayStatus.toList();
var todayLastStatus =
from s in todayStatus.Include(s1 => s1.Device.Panel)
let lastTimeStamp = todayStatus.Max(s1 => s1.TimeStamp)
where s.TimeStamp == lastTimeStamp
select s;
var requestResult = todayLastStatus.FirstOrDefault();
return requestResult;
}
如果我取消對該行// var tempList = todayStatus.toList();
,在不使用tempList,它的工作原理:requestResult.Device設置! 但是,不好的一面是todayStatus.toList觸發一個帶來大量數據的請求。
那麼如何獲取DeviceStatus及其相關對象呢?
注:數據庫的背後,是SQL Server 2012中
我需要只返回一個元素與todayLastStatus.FirstOrDefault(),有太多todayStatus來執行todayStatus.toList(),我需要obejcts的所有屬性。 – abreneliere
不是問題。調用.toList(),而不是調用todayStatus上的.FirstOrDefault()。我已經更新了Select查詢。您可以檢索有限數量的列以滿足您的需求。 – RRM
我不需要第一個,我需要帶lastTimeStamp的那個,爲什麼我執行let lastTimeStamp = todayStatusForMax.Max(s1 => s1。TimeStamp) – abreneliere