如何在字符串数组上做一个包含
本文关键字:一个 包含 字符串 数组 | 更新日期: 2023-09-27 18:19:01
我使用谓词构建器类,我需要在字符串数组上调用contains方法,所以在下面的代码中,而不是无线电,我将传递字符串数组:
wherePredicate = wherePredicate.Or(m => m.MediaType.Contains("Radio"));
完整代码段:
if (param.iMediaGroupID > 0)
{
var wherePredicate = PredicateBuilder.False<MediaChannelModel>();
var ss = new NeptuneRepository<Lookup_MediaTypes>();
var mediagroups = ss.FindWhere(m => m.MediaGroupID == param.iMediaGroupID).Select(m => m.Name);
//problem area
wherePredicate = wherePredicate.Or(m => mediagroups.Contains(m.MediaType));
predicate = predicate.And(wherePredicate);
}
mediaGroups
= ["Radio","Tv","Magazine"]
如果m.MediaType
是这些值中的任何一个,则谓词为真。
在c#中有办法做到这一点吗?
我猜你想要这样的东西:
wherePredicate = wherePredicate.Or(m => array.Contains(m.MediaType));
或者:
wherePredicate = wherePredicate.Or(m => array.Any(x => m.MediaType.Contains(x)));
如果这两者都不是你所追求的,请澄清你的要求。
编辑:您现在面临的问题是,您实际上不是询问数组是否包含该值。您正在询问查询是否包含值。如果您将其更改为实际数组,您可能会发现它可以工作:
var mediagroups = ss.FindWhere(m => m.MediaGroupID == param.iMediaGroupID)
.Select(m => m.Name)
.ToArray();
但是,如果它们查询的是同一个数据库,那么您最好尝试在某种连接中执行此操作。
Jon Skeet的回答非常适合我。我一直在努力使. contains搜索针对数据库的字符串数组中的子字符串,而不是试图在单个c#字符串对象中查找子字符串。谢谢你!
下面是修改后的代码:
var predicate = PredicateBuilder.False<ClientXMemberDetail>();
predicate = predicate.Or(x => strArrselectedCustomMemberNumbers.Any<string>(y => x.MemberID.Contains(y)));
CustomSearchMembersAlreadyMatched = ClientXContext.ClientXMemberDetails
.AsExpandable()
.Where(predicate)
.ToList()
.Select(r => r.MemberID.ToString()).ToList();
(上面的ClientXContext是ObjectContext类的一个实例,strArrselectedCustomMemberNumbers是一个字符串数组,ClientXMemberDetails是ObjectSet,其中ClientXMemberDetail是EntityObject)
编辑:匿名我的客户的名字