Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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:NETMVC搜索中的多个单词_C#_Asp.net_Asp.net Mvc_Search - Fatal编程技术网

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”
Ah
posts
已经是一个
列表。使用这个
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”
Ah
posts
已经是一个
列表。使用这个
finalPosts.Add(posts.FirstOrDefault(s=>s.Title.Contains(splitString))
@Rockyy当然,我刚刚创建了一个新的
列表
,因为我不知道你想对结果做什么。使用该列表,您现在可以将所有搜索结果放在一个位置。