如何在实体框架中的where子句中链接替代条件

dod*_*ian 6 .net c# linq-to-entities entity-framework

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

var sql = Repository.Products.AsQueryable();

sql = sql.Where(x => x.Name == "aaaaa" || x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

sql = sql.Where(x => x.Name == "aaaaa");
sql = sql.Where(x => x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)

那么结果查询等于:

sql = sql.Where(x => x.Name == "aaaaa" && x.Name == "bbbbb");
Run Code Online (Sandbox Code Playgroud)

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

It'*_*ie. 10

正确的方式...... 就是这样.我的意思是,你可以把它写成

sql.Where(x => x.Name == "aaaaa").Concat(sql.Where(x => x.Name == "bbbbb"));
Run Code Online (Sandbox Code Playgroud)

但那个更慢,无序 ,看起来也更怪异.我不知道你在寻找什么,因为你发布的方式正确的方法.

但是,您似乎想要动态构建表达式(从您的评论中判断).如果是这样,那么你正在寻找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);
Run Code Online (Sandbox Code Playgroud)

对于代码PredicateBuilder在这里.