1 回答

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您想在同一Where
表達(dá)式中同時(shí)過(guò)濾日志文件名和日志文件內(nèi)容,我看不到沒有自定義IQueryable
LINQ 提供程序的解決方案,因?yàn)檫@正是它們的用例:以智能方式訪問(wèn)數(shù)據(jù)方式基于LINQ 查詢中使用的表達(dá)式。
也就是說(shuō),使用多步驟方法作為折衷方案可能是值得的:
使用LINQ限制要搜索的日志文件,
讀取文件和
使用 LINQ 進(jìn)行進(jìn)一步搜索。
例子:
IEnumerable<LogFile> files = LogFiles.Where(f => f.Date > new DateTime(17, 1, 1) && f.AccountID == 4711);
IEnumerable<LogData> data = ParseLogFiles(files);
IEnumerable<LogData> filteredData = data.Where(d => d.val1 == 42 && d.val2 > 17);
LogData firstMatch = filteredData.FirstOrDefault();
如果您實(shí)現(xiàn)ParseLogFiles(a) 延遲執(zhí)行和 (b) 作為 上的擴(kuò)展方法IEnumerable<LogFile>,則生成的代碼將在外觀上與純 LINQ 非常相似:
var filteredData = LogFiles.
Where(f => f.Date > new DateTime(17, 1, 1) && f.AccountID = 4711).
ParseLogFiles().
Where(d => d.val == 42 && d.val2 > 17);
// If ParseLogFiles uses deferred execution, the following line won't read
// more log files than required to get the first matching row:
var firstMatch = filteredData.First();
這比在一個(gè) LINQ 查詢中包含所有內(nèi)容要多一些工作,但它使您不必實(shí)現(xiàn)自己的 LINQ 提供程序。
- 1 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報(bào)