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)
可以简化表达式