我試圖在IEnumerable
中搜索特定記錄(使用謂詞)。如果該記錄不存在,我想返回第一條記錄。如果那也不存在,我只想要null
。我目前使用LINQ FirstOrDefault帶謂詞,如果找不到只是FirstOrDefault
var category = categories.FirstOrDefault(
c => c.Category == "C") ??
category.FirstOrDefault();
ReSharper的
給我一個警告(IEnumerable的可能的多個枚舉)。警告告訴我,我的sql語句可能會執行兩次。一次嘗試找到「C」類別,並再次獲得第一條記錄。如果我首先使用categories.ToList()
將類別轉換爲列表,警告將消失。但是如果類別包含大量記錄,那可能會很慢。
有沒有更好的方法來做到這一點?或者我應該忽略這個警告?
如果你想在代碼*中對任意'IEnumerable' *做到這一點,我會建議一個自定義的擴展方法;但考慮到這些項目來自SQL服務器,如果您希望在不重複所有記錄的情況下執行此操作,則需要在數據庫服務器上執行此操作。我認爲不太可能有一組可以自動翻譯的LINQ方法,所以我認爲這是一個sproc。 – AakashM