0

我正在使用谓词构建器类,我需要在字符串数组上调用 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# 中做到这一点?

4

2 回答 2

7

我怀疑你想要类似的东西:

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();

但是,如果它们正在查询同一个数据库,您最好尝试在某种连接中执行此操作。

于 2013-06-18T07:24:19.773 回答
0

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)

编辑:匿名我的客户的名字

于 2013-10-17T23:36:19.233 回答