可以在声明后添加或查询linq查询吗?
我的意思是,如果我有:
Query.Where(f => some-condition );
我想添加" OR"之后:
if (some-condition)
Query.WhereOr(f => some-condition );
答案 0 :(得分:1)
看起来您可能正在寻找Predicate builder 或者你可以叠加一些.Where子句,因为linq是懒惰的。
由于你的问题缺乏上下文,想象一下根据一个表格查询一个Person表(2个字段/ 1个复选框)。
// Where Stacking
if (!string.IsNullOrEmpty(FieldA.Text))
{// OR
result = query.Where(item => item.Something.Contains(FieldA.Text));
}
if (!string.IsNullOrEmpty(FieldB.Text))
{// AND
result = result.Where(item => item.SomethingElse.Contains(FieldB.Text));
}
// Predicate
if (CheckBox1.Checked || CheckBox2.Checked || CheckBox3.Checked))
{//Here your initialise your predicate to false because you are going to do OR
var predicate = PredicateBuilder.False<SearchItem>();
if(CheckBox1.Checked) predicate = predicate.Or(item => item.Foo == 1);
if(CheckBox2.Checked) predicate = predicate.Or(item => item.Foo == 2);
if(CheckBox3.Checked) predicate = predicate.Or(item => item.Foo == 3);
result = result.Where(predicate);
}
堆叠哪里是一个好的解决方案,但可能产生一点点过热,但没有什么是真正值得注意的。
的文章答案 1 :(得分:0)
您应该使用LinqKit.PredicateBuilder类
示例:
var predicate = PredicateBuilder.True<Product>();
if(inputPrice > 100)
predicate = predicate.And (p => p.Price > 100);
if(inputName == "S%")
predicate = predicate.And (p => p.Name.StartsWith("S"));
最后,
var result = products.Where(predicate);
更多详情Wiki
答案 2 :(得分:0)
IEnumerable和IQueryable在某种程度上将允许你链条件
Query.Where(f=> some-condition || some_other_condition);
// or
var q = Query.Where(f=> some-condition)
if(stuff_needs_to_happen)
q = q.Where(f => stuff_that_needs_to_happen)
&#34;在某种程度上的原因&#34;使用IQueryable时,基础查询语言可能不支持谓词中的某些条件(自定义函数等)。