簡體   English   中英

動態創建linq查詢

[英]Create dynamically linq query

我有一個EventLogEntry對象:

EventLog aLog = new EventLog("Application");
IEnumerable<EventLogEntry> logentry=aLog.Entries.Cast<EventLogEntry>();

現在,我嘗試通過InstanceIdlogentry上創建動態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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM