如何组合Linq查询结果

如何组合Linq查询结果,linq,Linq,我需要能够向Linq查询添加数量未知的where子句。目前,我一直在尝试使用Concat()组合查询。例如: var r1 = from field in db.fields where ID == 1 select field; var r2 = from field in db.fields where ID == 2 select field var r3 = r1.Concat(r2); 这给了我奇怪的结果,所以我知道一定有更好的方

我需要能够向Linq查询添加数量未知的where子句。目前,我一直在尝试使用Concat()组合查询。例如:

var r1 =
    from field in db.fields
    where ID == 1
    select field;

var r2 = 
    from field in db.fields
    where ID == 2
    select field

var r3 = r1.Concat(r2);
这给了我奇怪的结果,所以我知道一定有更好的方法来做到这一点。有没有办法按照“累积结果”的思路去做某事;例如:

r1 = r1 + r2

其中r1得到它之前得到的所有结果加上r2得到的所有结果。这将允许我遍历“where”过滤器列表,并将它们作为OR语句进行组合。感谢所有能帮忙的人

听起来您正在寻找联合运算符:

var r1 = Context.Fields.Where<FieldObject>(f => f.ID == 1).Select<FieldObject, Field>(f => f.Field);
var r2 = Context.Fields.Where<FieldObject>(f => f.ID == 2).Select<FieldObject, Field>(f => f.Field);
var r3 = r1.Union<Field>(r2);
var r1=Context.Fields.Where(f=>f.ID==1)。选择(f=>f.Field);
var r2=Context.Fields.Where(f=>f.ID==2)。选择(f=>f.Field);
变量r3=r1.并(r2);

听起来您正在寻找联合操作员:

var r1 = Context.Fields.Where<FieldObject>(f => f.ID == 1).Select<FieldObject, Field>(f => f.Field);
var r2 = Context.Fields.Where<FieldObject>(f => f.ID == 2).Select<FieldObject, Field>(f => f.Field);
var r3 = r1.Union<Field>(r2);
var r1=Context.Fields.Where(f=>f.ID==1)。选择(f=>f.Field);
var r2=Context.Fields.Where(f=>f.ID==2)。选择(f=>f.Field);
变量r3=r1.并(r2);

如果您试图执行r1=r1+r2,那么您应该使用一些行为,例如
ToList
。您可以看到,在LINQ中,查询仅在需要时执行,而不是在定义位置执行。 因此,查询应该如下所示

r1 = r1.Union(r2).ToList()
另外,请注意使用了Union而不是Concat。“Concat方法返回输入序列中的所有原始元素。Union方法只返回唯一元素。”(from)

编辑:或者您可以使用构建Or ed谓词,例如

var predicate = PredicateBuilder.False<Field>();
foreach(Expression<Func<Field,Boolean>> filt in filters){
  predicate = predicate.Or(filt);
}
var result = db.fields.Where(predicate);
var predicate=PredicateBuilder.False();
foreach(过滤器中的表达式过滤器){
谓词=谓词或(filt);
}
var result=db.fields.Where(谓词);

如果您试图执行r1=r1+r2,那么您应该使用一些行为,例如
ToList
。您可以看到,在LINQ中,查询仅在需要时执行,而不是在定义位置执行。 因此,查询应该如下所示

r1 = r1.Union(r2).ToList()
另外,请注意使用了Union而不是Concat。“Concat方法返回输入序列中的所有原始元素。Union方法只返回唯一元素。”(from)

编辑:或者您可以使用构建Or ed谓词,例如

var predicate = PredicateBuilder.False<Field>();
foreach(Expression<Func<Field,Boolean>> filt in filters){
  predicate = predicate.Or(filt);
}
var result = db.fields.Where(predicate);
var predicate=PredicateBuilder.False();
foreach(过滤器中的表达式过滤器){
谓词=谓词或(filt);
}
var result=db.fields.Where(谓词);