如果我在数组中有两个元素;
FirstName,LastName,Company
Donald,Duck,Disney
Daffey,Duck,Warner Brothers
现在我的用户输入“d”,我应该得到两个记录。
现在我的用户输入“duck”并再次获得两个记录。
现在我的用户输入“duck disn”,我只能获得第一条记录。
有没有办法在linq中执行此操作?
修改的
我尝试了一些事情,最新的是这个;
var searchTerms = searchText.Split(" ".ToCharArray());
enquiryList = enquiryList.Where(x =>
searchTerms.Contains(x.CompanyName.ToLower()) ||
searchTerms.Contains(x.FirstName.ToLower()) ||
searchTerms.Contains(x.LastName.ToLower())).ToList();
但这只有在我输入像迪士尼这样的完整单词而不是像dis
这样的部分单词时才有效答案 0 :(得分:4)
var searchParts = searchText.Split(' ');
var matcheds = enquiryList.Where(enquiry =>
{
var texts = new[] { enquiry.FirstName, enquiry.LastName, enquiry.Company };
return searchParts.All(part => texts.Any(text =>
text.IndexOf(part, StringComparison.OrdinalIgnoreCase) >= 0));
});
清除你的想法。 LINQ很简单。
您希望在All
Any
,FirstName
或LastName
Company
中找到const str = 'Hello World';
const stringToArray = (text) => {
var chars = [];
for (var i = 0; i < text.length; i++) {
chars.push(text[i]);
}
return chars
}
console.log(stringToArray(str))
个搜索字词的项目
答案 1 :(得分:3)
听起来我想要搜索所有三个字段以匹配字符串。
假设您有一个名为Person
的类,其中包含三个属性(FirstName,LastName,Company
),您可以这样做。
var splits = searchText.Trim().Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries);
persons.Where(p=> splits.All(x=>
p.FirstName.IndexOf(x, StringComparison.OrdinalIgnoreCase) >=0
|| p.LastName.IndexOf(x, StringComparison.OrdinalIgnoreCase) >=0
|| p.Company.IndexOf(x, StringComparison.OrdinalIgnoreCase) >=0));
工作Example
答案 2 :(得分:1)
这涵盖了所有情况:
singInWithCredential(idToken)