Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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# 基于ASP.net core中的搜索字符串显示结果_C#_Search_Asp.net Core - Fatal编程技术网

C# 基于ASP.net core中的搜索字符串显示结果

C# 基于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

我有一个名为models的列表,其中包含另一个名为variants的列表。我想执行getbysearchString方法,其中使用url中传递的searchstring过滤变量名称

Repository.cs

_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+