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是在这里.