c# - Linq多关键字搜索

标签 c# linq-to-sql search

我有一种情况,我在表中有关键字列,其中包含逗号分隔的关键字。用户可以提供多个搜索词来搜索关键字列。例如,用户提供以下搜索词“一、二、三”,数据库列可能包含“一”、“二”、“三”中的任何一个,也可能不包含其中任何一个。我怎样才能编写与任何提供的搜索词相匹配的查询。

我试过下面的

string[] searchTerm = {"one","two","three"};

query =Product.Where( p=> searchTerm.Any(val => p.Keywords.Contains(val)));

var query=db.Products;

 foreach (string searchword in searchTerm)
  {
    query = query.Where(c => c.Keywords.Contains(searchword ));
  }

但它对我不起作用。
谢谢,

最佳答案

如果您将用户提供的文本拆分为不同的关键字,例如在字符串 [] 中转换“one,two”,three”,您可以这样做:

 string [] keys = keywords.Split(',');
 var query = new List<Product>();
 foreach (var item in keys)
 {
    query = query.Concat ((IEnumerable<Product>)Product.Where(x=>x.KeyWords.Contains(item))).ToList();
 }

例子:

List<Product> ass = new List<Product>();

Product a = new Product();
a.KeyWords = "one, two, three";

Product a1 = new Product();
a1.KeyWords = "one, three";

Product a2 = new Product();
a2.KeyWords = "five";

ass.Add(a);
ass.Add(a1);
ass.Add(a2);

string userInput = "one, seven";

string [] keys = userInput.Split(',');
var query = new List<Product>();
foreach (var item in keys)
{
    query = query.Concat ((IEnumerable<Product>)ass.Where(x=>x.KeyWords.Contains(item))).ToList();
}

foreach (var item in query )
{
    Console.WriteLine(item.KeyWords);
}

打印:

one, two, three
one, three

关于c# - Linq多关键字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785554/

相关文章:

search - 寻找二维数组中两点之间的最短路径

php - 改进 Laravel 5.2 的搜索引擎查询

c# - 我可以在 Visual C# 中向后浏览文本以查找字符串吗?

c# - 使用 iTextSharp 制作两个相同的 PDF

c# - 在 Mono 中使用 LINQ 插入 Sqlite 数据库会抛出 TargetInitationException 和 SqliteException

c# - Owin Bearer token 不适用于 WebApi

c# - 如何使用 Entity Framework Core 在 LINQ 更新语句中使用 CURRENT_TIMESTAMP?

sql - 指示 LINQ to Entities 生成与 Oracle 兼容的 SQL

c# - 如何在 C# 中调整多维 (2D) 数组的大小?

c# - 在 Entity Framework 中映射/使用内置MySQL函数