如何对字符串数组进行包含?

Xer*_*xes 0 c# linq predicatebuilder

我正在使用谓词构建器类,我需要在字符串数组上调用contains方法,因此在下面的代码而不是radio中我会传入一个字符串数组:

wherePredicate = wherePredicate.Or(m => m.MediaType.Contains("Radio"));
Run Code Online (Sandbox Code Playgroud)

完整的代码部分:

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);
}
Run Code Online (Sandbox Code Playgroud)

mediaGroups 是: ["Radio","Tv","Magazine"]

如果m.MediaType是这些值中的任何一个,则谓词为真.

有没有办法在C#中做到这一点?

Jon*_*eet 7

我怀疑你想要的东西:

wherePredicate = wherePredicate.Or(m => array.Contains(m.MediaType));
Run Code Online (Sandbox Code Playgroud)

也许:

wherePredicate = wherePredicate.Or(m => array.Any(x => m.MediaType.Contains(x)));
Run Code Online (Sandbox Code Playgroud)

如果这些都不是您所追求的,请澄清您的要求.

编辑:您现在面临的问题是,您实际上并不是询问数组是否包含该值.您询问查询是否包含值.如果将其更改为实际数组,您可能会发现它有效:

var mediagroups = ss.FindWhere(m => m.MediaGroupID == param.iMediaGroupID)
                    .Select(m => m.Name)
                    .ToArray();
Run Code Online (Sandbox Code Playgroud)

但是,如果这些是查询同一个数据库,那么最好尝试在某种类型的连接中执行此操作.