我有一個問題與LINQ包含到SQL查詢,如下:傳遞null爲包含()內「的LINQ to SQL」查詢
public IAuditRecord[] Fetch(SearchConditions searchConditions)
{
IAuditRecord[] searchedList = (from rows in _dbContex.AuditTrails
where
(searchConditions.Owner == null || searchConditions.Owner == 0) ? true : rows.Owner == searchConditions.Owner
&&
/*This line cannot compile when ActionIDs array is empty*/
(searchConditions.ActionIDs != null && searchConditions.ActionIDs.Length != 0) ? searchConditions.ActionIDs.Contains(rows.UserActionID) : true
&& ((searchConditions.StartDate != null && searchConditions.EndDate != null) ? (rows.TimeStamp >= searchConditions.StartDate && rows.TimeStamp <= searchConditions.EndDate)
: (searchConditions.StartDate != null && searchConditions.EndDate == null) ? rows.TimeStamp >= searchConditions.StartDate : (searchConditions.StartDate == null && searchConditions.EndDate != null) ? (rows.TimeStamp <= searchConditions.EndDate)
: true)
select rows).ToArray();
return searchedList;
}
該查詢執行完美如果searchCondition.ActionIDs陣列不爲空或空, 但是當我傳遞ActionIDs數組爲空查詢無法編譯。
所以主要問題是爲什麼包含ActionIDs數組爲空時無法工作?
嗯,一切似乎就在乍看之下。我可能會建議的一件事就是對規範模式進行一些研究。用於過濾記錄的謂詞(例如where子句)在閱讀和理解的過程中非常複雜,而沒有真正考慮它。通過創建一些規範,您可以極大地提高代碼的可讀性並減輕調試工作(您可能知道哪個規範失敗了)。 – fourpastmidnight
它爲什麼會起作用?調用對象設置爲null的任何函數應該會導致一個'NullReferenceException' – Magnus
因爲他正在檢查null:'searchConditions.ActionIDs!= null'。 – fourpastmidnight