[英]Create dynamically linq query
我有一個EventLogEntry對象:
EventLog aLog = new EventLog("Application");
IEnumerable<EventLogEntry> logentry=aLog.Entries.Cast<EventLogEntry>();
現在,我嘗試通過InstanceId在logentry
上創建動態linq查詢。 我可以運行:
int id=123;
IEnumerable<EventLogEntry> filteredByEventId = logentry.Where((x) => x.InstanceId == id);
但我試圖在運行時創建linq術語。 像這樣:
int id=123;
int id2=456;
IEnumerable<EventLogEntry> filteredByEventId = logentry.Where((x) => x.InstanceId == id || x.InstanceId == id2);
雖然我知道在運行時也添加了“ id2”一詞。
更新:我的主要目標是用戶可以要求InstanceId范圍,例如123、456-789、1000-1005,並且我需要創建正確的查詢(動態地),該查詢將向他顯示以下InstanceId 123和456-789之間的所有事件(和1000-1005)
有沒有辦法做到這一點?
為什么不將Linq 包含與列表/數組一起使用?
var ids = new List<int>();
ids.Add(123);
ids.Add(456);
// etc...
IEnumerable<EventLogEntry> filteredByEventId = logentrey.Where((x) => ids.Contains(x.InstanceId));
編輯
要應用多個范圍,可以使用最小/最大元組的集合,然后使用Linq All方法按每個范圍進行過濾:
// setup ranges
var ranges = new List<Tuple<int, int>>();
ranges.Add(new Tuple<int,int>(123,123));
ranges.Add(new Tuple<int,int>(456,789));
ranges.Add(new Tuple<int,int>(1000,1005));
// apply filter
var filteredByEventId = logentry.Where(x =>
ranges.All(range => x >= range.Item1 && x <= range.Item2)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.