LINQ lambda表达式追加或声明 [英] LINQ lambda expression append OR statement

查看:189
本文介绍了LINQ lambda表达式追加或声明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我要追加及陈述我的查询,我可以这样做:

 查询= query.Where(OBJ => obj.Id == ID); 

如果(name.HasValue)
=查询query.Where(OBJ => obj.Name ==名);

和它会给我:

  query.Where(OBJ => obj.Id == ID和放大器;&安培; obj.Name ==名)

我怎么能追加或声明会导致:

 查询。凡(OBJ => obj.Id == ID || obj.Name ==名称)


解决方案

您不能这样做本身。但是,您可以使用 PredicateBuilder 在运行之前撰写查询,并支持OR值

  VAR谓词= PredicateBuilder.False<产品及GT;(); 
谓语= predicate.Or(OBJ => obj.Id == ID);
如果(name.HasValue)谓词= predicate.Or(OBJ => obj.Name ==名);

返回query.Where(谓语);


If I want to append a AND statement to my query, I can do:

query = query.Where(obj=>obj.Id == id);

if(name.HasValue)
  query = query.Where(obj=>obj.Name == name);

and it will give me:

query.Where(obj=>obj.Id == id && obj.Name == name)

How can I append a OR statement that will result in:

query.Where(obj=>obj.Id == id || obj.Name == name)

解决方案

You can't do it natively. However, you can use PredicateBuilder to compose the query before you run it, and it supports ORs.

var predicate = PredicateBuilder.False<Product>();
predicate = predicate.Or (obj=>obj.Id == id);
if(name.HasValue)  predicate = predicate.Or (obj=>obj.Name == name);

return query.Where(predicate);

这篇关于LINQ lambda表达式追加或声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆