C# ASP:NETMVC搜索中的多个单词
当用户搜索时,我很难找到如何处理多个单词。例如:搜索:“蓝色方框”它应该能够找到:“一个方框是蓝色”。我该怎么做?这就是我的控制器的基本外观:C# ASP:NETMVC搜索中的多个单词,c#,asp.net,asp.net-mvc,search,C#,Asp.net,Asp.net Mvc,Search,当用户搜索时,我很难找到如何处理多个单词。例如:搜索:“蓝色方框”它应该能够找到:“一个方框是蓝色”。我该怎么做?这就是我的控制器的基本外观: public ActionResult Index(string searchString) { var posts = from s in _context.Posts select s; var postIndexViewModel = new PostIndexViewModel();
public ActionResult Index(string searchString)
{
var posts = from s in _context.Posts
select s;
var postIndexViewModel = new PostIndexViewModel();
if (!String.IsNullOrEmpty(searchString))
{
posts = posts.Where(s => s.Title.Contains(searchString));
}
// More code here
return View(postIndexViewModel);
}
我能想到的一种方法是通过拆分传入的搜索字符串来逐项搜索
public ActionResult Index(string searchString)
{
var posts = from s in _context.Posts
select s;
var postIndexViewModel = new PostIndexViewModel();
if (!String.IsNullOrEmpty(searchString))
{
var terms = searchString.Trim().Split(' ');
posts = posts.Where(s => terms.Any(terms.Contains));
}
// More code here
return View(postIndexViewModel);
}
我能想到的一种方法是通过拆分传入的搜索字符串来逐项搜索
public ActionResult Index(string searchString)
{
var posts = from s in _context.Posts
select s;
var postIndexViewModel = new PostIndexViewModel();
if (!String.IsNullOrEmpty(searchString))
{
var terms = searchString.Trim().Split(' ');
posts = posts.Where(s => terms.Any(terms.Contains));
}
// More code here
return View(postIndexViewModel);
}
您的问题是,您正在使用整个字符串执行包含操作。这意味着它必须按该顺序包含
“蓝框”
这是您需要做的:
var strings = searchString.Split(' ');
var finalPosts = new List<string>();
if (!String.IsNullOrEmpty(searchString))
{
foreach (var splitString in strings)
{
finalPosts.Add(posts.FirstOrDefault(s => s.Title.Contains(splitString)));
}
}
var strings=searchString.Split(“”);
var finalPosts=新列表();
如果(!String.IsNullOrEmpty(searchString))
{
foreach(字符串中的var splitString)
{
Add(posts.FirstOrDefault(s=>s.Title.Contains(splitString));
}
}
finalPosts
列表将包含您的结果 您的问题是,您正在使用整个字符串执行包含操作。这意味着它必须按该顺序包含“蓝框”
这是您需要做的:
var strings = searchString.Split(' ');
var finalPosts = new List<string>();
if (!String.IsNullOrEmpty(searchString))
{
foreach (var splitString in strings)
{
finalPosts.Add(posts.FirstOrDefault(s => s.Title.Contains(splitString)));
}
}
var strings=searchString.Split(“”);
var finalPosts=新列表();
如果(!String.IsNullOrEmpty(searchString))
{
foreach(字符串中的var splitString)
{
Add(posts.FirstOrDefault(s=>s.Title.Contains(splitString));
}
}
finalPosts
列表将包含您的结果 首先使用searchString.Split(“”)将searchString拆分为一个数组,然后查看此处:Split
searchString使用空格。然后使用Array.Any()
如图所示-检查此链接首先使用searchString.Split(“”)将searchString拆分为一个数组,然后查看此处:Split
使用空格拆分searchString。然后使用如图所示的Array.Any()
-检查此链接是否正确。如何解决无法在finalPosts.Add()
行上从'System.Linq.IQueryable'转换为'string'
的问题?抱歉,我不确定您的类型是什么post
只需更改var finalPosts=new List()代码>收件人:var finalPosts=new List()代码>:)我也试过了。Got无法从“System.Linq.IQueryable”转换为“WebApplication3.Models.Post”
Ahposts
已经是一个列表。使用这个finalPosts.Add(posts.FirstOrDefault(s=>s.Title.Contains(splitString))
@Rockyy当然,我刚刚创建了一个新的列表
,因为我不知道你想对结果做什么。使用该列表,您现在将所有搜索结果放在一个位置。这看起来是正确的。如何解决无法在finalPosts.Add()
行上从'System.Linq.IQueryable'转换为'string'
的问题?抱歉,我不确定您的类型是什么post
只需更改var finalPosts=new List()代码>收件人:var finalPosts=new List()代码>:)我也试过了。Got无法从“System.Linq.IQueryable”转换为“WebApplication3.Models.Post”
Ahposts
已经是一个列表。使用这个finalPosts.Add(posts.FirstOrDefault(s=>s.Title.Contains(splitString))
@Rockyy当然,我刚刚创建了一个新的列表
,因为我不知道你想对结果做什么。使用该列表,您现在可以将所有搜索结果放在一个位置。