Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索多维数组对象';使用linq更新内容_C#_.net_Linq_Multidimensional Array - Fatal编程技术网

C# 搜索多维数组对象';使用linq更新内容

C# 搜索多维数组对象';使用linq更新内容,c#,.net,linq,multidimensional-array,C#,.net,Linq,Multidimensional Array,我的目标如下: public class RandomModel : Metadata { public string Name { get; set; } public ContentMod[][] Content { get; set; } public class ContentMod { public string Subtitle { get; set; } public string Text { get; set;

我的目标如下:

public class RandomModel : Metadata
{
    public string Name { get; set; }
    public ContentMod[][] Content { get; set; }

    public class ContentMod
    {
        public string Subtitle { get; set; }
        public string Text { get; set; }
        public string[] List { get; set; }
    }
}
我试图搜索并返回一个包含ContentMod的RandomModel,该ContentMod包含在其任何变量(字幕、文本和/或列表)中输入的字符串值

我正在尝试做以下等效工作:

var randomContent = (from item in RandomContent
                     where item.Name.ToUpper().Contains(search)
                     select item).ToList();
var randomContent = (from item in RandomContent
                     where item.ContentMod.???.ToUpper().Contains(search)
                     select item).ToList();
因此,如果我想从RandomModel中搜索Name文本中的字符串搜索输入,如果它确实包含搜索字符串,则返回RandomModel,我将执行以下操作:

var randomContent = (from item in RandomContent
                     where item.Name.ToUpper().Contains(search)
                     select item).ToList();
var randomContent = (from item in RandomContent
                     where item.ContentMod.???.ToUpper().Contains(search)
                     select item).ToList();
现在,我尝试在ContentMod的所有参数内搜索文本

如下所示:

var randomContent = (from item in RandomContent
                     where item.Name.ToUpper().Contains(search)
                     select item).ToList();
var randomContent = (from item in RandomContent
                     where item.ContentMod.???.ToUpper().Contains(search)
                     select item).ToList();
我好像搞不懂这个???以上部分。如何使用linq迭代多维对象的内容,如果它们包含字符串搜索,则返回随机模型

非常感谢您的帮助!
Al

如果您不介意使用方法语法而不是查询语法,那么这段代码怎么样

var randomContent = models.Where(r => r.Content.Any(x =>
{
    return x.Any(y =>
    {
        return y.Text.ToUpper().Contains(search)
            || y.Subtitle.ToUpper().Contains(search)
            || y.List.Any(z => z.ToUpper().Contains(search));
    });
})).ToList();
我通常使用
IndexOf
进行不区分大小写的搜索,因此在这种情况下,它看起来是这样的

var randomContent = models.Where(r => r.Content.Any(x =>
{
    return x.Any(y =>
    {
        return y.Text.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0
        || y.Subtitle.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0
        || y.List.Any(z => z.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0);
    });
})).ToList();
您可以根据需要调整
StringComparison

编辑:正如后面在评论中指出的那样,
SelectMany
可用于提供此信息

var randomContent = models.Select(r => r.Content.SelectMany(o => o.Where(x =>
{
    return x.Text.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0
        || x.Subtitle.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) >= 0
        || x.List.Any(y => y.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) >= 0);
}))).ToList();
r.Content.SelectMany(o=>o)
可以简化表达式