C# 动态创建linq查询

C# 动态创建linq查询,c#,.net,C#,.net,我有一个目标: 但我试图在运行时创建linq术语。大概是这样的: int id=123; int id2=456; IEnumerable<EventLogEntry> filteredByEventId = logentry.Where((x) => x.InstanceId == id || x.InstanceId == id2); intid=123; int id2=456; IEnumerable filteredByEventId=logentry,其中((x)

我有一个目标:

但我试图在运行时创建linq术语。大概是这样的:

int id=123;
int id2=456;
IEnumerable<EventLogEntry> filteredByEventId = logentry.Where((x) => x.InstanceId == id || x.InstanceId == id2);
intid=123;
int id2=456;
IEnumerable filteredByEventId=logentry,其中((x)=>x.InstanceId==id | | x.InstanceId==id2);
虽然我知道在运行时也有“id2”来添加术语

更新: 我的主要目标是用户可以请求InstanceId范围,如 123, 456-789, 1000-1005 我需要创建一个正确的查询(动态)来显示instanceID123和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));
var id=new List();
同上(123);
同上(456);
//等等。。。
IEnumerable filteredbyventid=logentry.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)
);
//设置范围
变量范围=新列表();
添加(新元组(123123));
添加(新元组(456789));
添加(新元组(10001005));
//应用过滤器
var filteredbyventid=logentry.Where(x=>

ranges.All(range=>x>=range.Item1&&x)您总是比较ID吗?我无法用这个“Contains”语句获取range(123-456)。因此这对我没有帮助。谢谢anyway@user986474我认为类似的原则也适用——请看我的更新。
var ids = new List<int>();
ids.Add(123);
ids.Add(456);
// etc...

IEnumerable<EventLogEntry> filteredByEventId = logentrey.Where((x) => ids.Contains(x.InstanceId));
// 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)
);