查找列表中包含字符串数组值的所有元素

时间:2016-06-28 05:41:24

标签: c# linq

如果我在数组中有两个元素;

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

这样的部分单词时才有效

3 个答案:

答案 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 AnyFirstNameLastName

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)