C# 基于ASP.net core中的搜索字符串显示结果
我有一个名为models的列表,其中包含另一个名为variants的列表。我想执行getbysearchString方法,其中使用url中传递的searchstring过滤变量名称 Repository.csC# 基于ASP.net core中的搜索字符串显示结果,c#,search,asp.net-core,C#,Search,Asp.net Core,我有一个名为models的列表,其中包含另一个名为variants的列表。我想执行getbysearchString方法,其中使用url中传递的searchstring过滤变量名称 Repository.cs _list.Add(new ModelSearch { ID = 1, Title = "Scorpio", Variants=new List<Variant&g
_list.Add(new ModelSearch
{
ID = 1,
Title = "Scorpio",
Variants=new List<Variant> { new Variant {ID=1,ModelID=1,Title="Scorpio VLX refresh" },
new Variant { ID=2,ModelID=1,Title="Scorpio LX refresh" },
new Variant { ID=3,ModelID=1,Title="Scorpio3 S2" }
}
});
_list.Add(new ModelSearch
{
ID = 2,
Title = "Bolero",
Variants = new List<Variant> { new Variant {ID=1,ModelID=2,Title="T4" },
new Variant { ID=2,ModelID=2,Title="T4+" },
new Variant { ID=3,ModelID=2,Title="T6" },
new Variant { ID=3,ModelID=2,Title="T6+" }
}
});
//Search method
public IEnumerable<ModelSearch> GetBySearchString(string searchString)
{
return _list.Where(m => m.Title.ToLower().Contains(searchString)|| m.Variants.Contains(searchString)).AsEnumerable();
}
\u列表。添加(新模型搜索
{
ID=1,
Title=“天蝎座”,
Variants=new List{new Variant{ID=1,ModelID=1,Title=“Scorpio VLX refresh”},
新的变体{ID=2,ModelID=1,Title=“Scorpio LX refresh”},
新变量{ID=3,ModelID=1,Title=“Scorpio3 S2”}
}
});
_list.Add(新模型搜索)
{
ID=2,
Title=“Bolero”,
Variants=new List{new Variant{ID=1,ModelID=2,Title=“T4”},
新变量{ID=2,ModelID=2,Title=“T4+”},
新变量{ID=3,ModelID=2,Title=“T6”},
新变量{ID=3,ModelID=2,Title=“T6+”}
}
});
//搜索方法
公共IEnumerable GetBySearchString(字符串搜索字符串)
{
返回_list.Where(m=>m.Title.ToLower().Contains(searchString)| | m.Variants.Contains(searchString)).AsEnumerable();
}
ModelSearchController.cs
public class ModelSearchController : Controller
{
private IRepository _repo;
public ModelSearchController()
{
_repo = new Repository.Repository();
}
public IActionResult Search(string searchString)
{
var filteredList = _repo.GetBySearchString(searchString);
return View(filteredList);
}
}
Here is my **Index.cshtml** file:
@model IEnumerable<myApp.Models.ModelSearch>
<table class="table">
<tbody>
@foreach (var item in Model)
{
@foreach (var variant in item.Variants)
{
<tr>
<td>
@Html.DisplayFor(modelItem => variant.Title)
</td>
</tr>
}
}
</tbody>
</table>
公共类ModelSearchController:控制器
{
私人投资回购;
公共ModelSearchController()
{
_repo=newrepository.Repository();
}
公共IActionResult搜索(字符串搜索字符串)
{
var filteredList=\u repo.GetBySearchString(searchString);
返回视图(filteredList);
}
}
这是我的**Index.cshtml**文件:
@模型IEnumerable
@foreach(模型中的var项目)
{
@foreach(项目变量中的变量)
{
@DisplayFor(modelItem=>variant.Title)
}
}
请帮助我如何实现这一点。您的linq查询不正确。它只降低标题的大小写,但不降低searchString的大小写。而且,它没有检查变体的标题
public IEnumerable<ModelSearch> GetBySearchString(string searchString)
{
return _list.Where(
m => m.Title.Contains(searchString, StringComparison.InvariantCultureIgnoreCase) ||
m.Variants.Any(v => v.Title.Contains(searchString, StringComparison.InvariantCultureIgnoreCase))
).AsEnumerable();
}
public IEnumerable GetBySearchString(字符串搜索字符串)
{
return\u list.Where(
m=>m.Title.Contains(searchString、StringComparison.InvariantCultureInogoreCase)||
m、 Variants.Any(v=>v.Title.Contains(searchString、StringComparison.InvariantCultureIgnoreCase))
).AsEnumerable();
}
更新-筛选出标题不包含搜索字符串的变体
public IEnumerable<ModelSearch> GetBySearchString(string searchString)
{
return _list.Where(
m => m.Title.Contains(searchString, StringComparison.InvariantCultureIgnoreCase) ||
m.Variants.Any(v => v.Title.Contains(searchString, StringComparison.InvariantCultureIgnoreCase))
)
.Select( m =>
new ModelSearch
{
ID = m.ID,
Title = m.Title,
Variants = m.Variants.Where(v => v.Title.Contains(searchString, StringComparison.InvariantCultureIgnoreCase)).ToList()
}
)
.AsEnumerable();
}
public IEnumerable GetBySearchString(字符串搜索字符串)
{
return\u list.Where(
m=>m.Title.Contains(searchString、StringComparison.InvariantCultureInogoreCase)||
m、 Variants.Any(v=>v.Title.Contains(searchString、StringComparison.InvariantCultureIgnoreCase))
)
.选择(m=>
新模型搜索
{
ID=m.ID,
Title=m.Title,
Variants=m.Variants.Where(v=>v.Title.Contains(searchString、StringComparison.InvariantCultureIgnoreCase)).ToList()
}
)
.AsEnumerable();
}
您的代码现在做什么?你希望它做什么呢?我只能过滤模型名。我想根据变体名称筛选列表。我将searchstring作为url参数传递。例如,如果我将T6作为searchstring传递,那么我希望在screensearchString上打印变量名T6和T6+,也应该降低,否则您的字符串可能处于不同的情况将searchstring转换为lower,但实际情况并非如此worked@nff你能详细说明什么不起作用吗?这在某种程度上是正确的,但我得到的是不相关的结果。例如,我以searchString=4的形式传递搜索字符串。我得到了与模型列表对应的所有结果。请看这张图片:嗯。。刚刚测试了函数,函数只返回“Bolero”模型。您确定“4”真的被传递到函数中了吗?是的,整个bolero模型将与当前函数一起返回。我只想返回包含4的特定行。我不想要整个bolero模型。我们能做到这一点吗?它不太管用。当模型名和变量名都匹配时,它将返回结果。当变量名称匹配但模型名称不匹配时,它不返回该行。如果输入6,它将返回模型名称不匹配的这两行参数:6 ID:2 Title:Bolero Variants:T6 ID:2 Title:Bolero Variants:T6+