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)
对于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)