检查字符串是否包含任何顺序的特定字符

时间:2015-04-22 21:45:46

标签: c# .net linq

我可以解释我尝试做的最好方法是举个例子:

我的数据库中有一个字符串StackOverflow,当用户输入OAW时,我希望以任何顺序返回该字符串和包含这三个字符的任何其他单词。

我尝试过使用各种LINQ / Lambda表达式,但无济于事。

query.Where(a => a.SerialNumber.Contains(a));

我找到了一篇与我的相似的帖子here on SO,但它是用Java编写的。

我觉得我尝试做的事情非常简单,但我只是错过了它。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

您可以尝试这样的事情:

query.Where(str => value.All(str.SerialNumber.Contains));

对于数据库中的任何字词,您可以检查valueOAW,使用All扩展方法的所有字符是否都包含在{{1}中}。

<强>更新

str.SerialNumber

等同于这个lambda表达式:

str.SerialNumber.Contains

x => str.SerialNumber.Contains(x) 是指我们应用x的序列的随机元素。换句话说,All的随机字符。

答案 1 :(得分:1)

您可以使用ContainsAll类型的函数。

public static bool ContainsAllItems(IEnumerable<T> a, IEnumerable<T> b)
{
    return !b.Except(a).Any();
}

注意

该函数来自here

答案 2 :(得分:1)

你可以通过稍微修改你的代码来做到这一点:

public bool DoesContain(char[] identifiers, string containingString)
{
    return !identifiers.Except(containingString.ToCharArray()).Any();
}

或:

private char[] identifiers = { /* Your identifiers*/ };

public bool DoesContain(string containingString)
{
    return !identifiers.Except(containingString.ToCharArray()).Any();
}

如果传递的字符串包含任何指定的字符,则这些方法中的任何一个都将返回true。

注意:

来自Cameron MacFarland的解决方案this question

答案 3 :(得分:0)

看起来你可以进行多重比较和&amp;&amp;他们,或使用正则表达式。我更喜欢前者,这是一个简洁的例子:

arrOfCharacters.All(a.SerialNumber.Contains)

虽然您可能需要使用ToUpperInvariant()

来丢弃代码