LINQ是否可以动态添加where子句

tkc*_*kcn 8 c# linq entity-framework where-clause

我想用不同的密钥搜索我的数据库.根据输入,10键可能有1个键.有没有办法动态地向我的Linq查询添加OR/AND子句?

 keys[k] // I have my keys in this array 
 var feedList = (from feed in ctx.Feed
                 where feed.content.contains(keys[0]) 
                       && feed.content.contains(keys[1])
                       && ... // continues with the keys.length
                 select new {
                    FeedId = feed.DuyuruId,
                    FeedTitle = feed.FeedTitle,
                    FeedContent = feed.FeedContents,
                    FeedAuthor = user.UserName + " " +User.UserSurname
 }
Run Code Online (Sandbox Code Playgroud)

mel*_*okb 13

您可以尝试使用.All子句来检查所有键:

where keys.All(key => feed.content.contains(key))
Run Code Online (Sandbox Code Playgroud)


mip*_*e34 6

对于AND子句来说很简单:

var feedList = from feed in ctx.Feed;
foreach(var key in keys){
    feedList = feedList.Where(x=> content.contains(key));
}
var resultQuery = feedList.Select(x=> new {....});
Run Code Online (Sandbox Code Playgroud)

对于OR,您需要使用Expressions或尝试LinqKit及其谓词:

var predicate = PredicateBuilder.False<TypeOfYourEntity>();
foreach(var key in keys){
    predicate = predicate.Or(x=> content.contains(key));
}
var resultQuery = ctx.Feed.Where(predicate).Select(x=> new {....});
Run Code Online (Sandbox Code Playgroud)