9

我正在尝试将以下查询重写为单独的语句:

var sql = Repository.Products.AsQueryable();

sql = sql.Where(x => x.Name == "aaaaa" || x.Name == "bbbbb");

如果我这样做:

sql = sql.Where(x => x.Name == "aaaaa");
sql = sql.Where(x => x.Name == "bbbbb");

那么结果查询等于:

sql = sql.Where(x => x.Name == "aaaaa" && x.Name == "bbbbb");

有什么想法如何以正确的方式做到这一点?

4

2 回答 2

12

正确的方法……就是这样。我的意思是,你可以写成

sql.Where(x => x.Name == "aaaaa").Concat(sql.Where(x => x.Name == "bbbbb"));

但这更慢无序 并且看起来也更奇怪。我不知道您在寻找什么,因为您发布的方式正确的方式。

但是,您似乎想动态构建表达式(从您的评论来看)。如果是这样,那么您正在寻找PredicateBuilder

var predicate = PredicateBuilder.False<YourType>();
var search = new[] {"aaaaa", "bbbbb"};
foreach (string y in search)
{
    string name = y;
    predicate = predicate.Or(x => x.Name == name);
}
sql = sql.Where(predicate);

的代码PredicateBuilder这里

于 2013-06-30T22:32:37.200 回答
4

如果您想根据条件构建谓词,请使用Predicate Builder

于 2013-06-30T22:37:54.010 回答