我想用一個Linq查詢來搜索巨大列表中的匹配項(大約100k項)。搜索標準需要是字段StateCode
,ChannelCode
,EndDate
和ZipCode
。Linq查詢從包含檢查爲空條件的列表
然而,檢查ZipCode
是有點棘手。我需要給拉了回來給出以下兩種情況的結果:
- 如果
StateCode
,ChannelCode
和EndDate
是一根火柴,然後在列表中的匹配記錄有ZipCode
一個null
值。 - 如果
StateCode
,ChannelCode
,EndDate
和ZipCode
是一根火柴,用ZipCode
是在這兩個列表,比較項目的定義值
這是因爲我有它現在查詢......這沒有按」工作。它不斷拉回一個列表,計數爲0
。但是,如果我刪除搜索ZipCode
匹配的部分,則會得到結果。
List<ZipCodeTerritory> previousZips = allRecords.Where(
z => (z.StateCode.Equals(item.StateCode) &&
z.ChannelCode.Equals(item.ChannelCode) &&
z.EndDate.Date == item.EndDate.Date &&
(z.ZipCode.Equals(null) | z.ZipCode.Equals(item.ZipCode))
)).ToList();
我也曾嘗試更換z.ZipCode.Equals(null)
與string.IsNullOrWhiteSpace(z.ZipCode)
,這仍然沒有奏效。
編輯:我也嘗試了用條件和|
作爲||
的or
操作。兩者都不能...
爲了以防萬一,這裏是查詢寫入SQL語句。如果我在SQL Server Management Studio中運行它,它會按預期工作。
SELECT * FROM ZipCodeTerritory
WHERE StateCode = 'OR ' and ChannelCode = 'G' and EndDate = '12/31/9999' and (ZipCode IS NULL OR ZipCode = '00001')
第二個編輯
這是我如何抓住從數據庫中記錄。同樣,因爲我不想多次撥打電話,我想從ZipCodeTerritory
表中獲取所有記錄,然後搜索該列表。
List<ZipCodeTerritory> allRecords = (from z in db.ZipCodeTerritory
select z).ToList();
它不斷拉回一個計數爲0的列表(在上文中提到) – NealR
就像一個筆記,我認爲,在&之前(它本身在||之前),所以|和||並非嚴格互換。 – JakeP