LINQ与非lambda for Any Contains

时间:2011-12-14 21:26:56

标签: linq

如何使用非lambda表达Linq以下(不起作用):

string[] words = { "believe", "relief", "receipt", "field" }; 
var wd = (from word in words
          select word).Any(Contains ("believe"));

2 个答案:

答案 0 :(得分:3)

目前还不清楚你相信from wor in words select wor正在做什么 - 它根本没有帮助你。

还不清楚为什么想要使用lambda表达式。显而易见的方法是:

bool hasBelieve = words.Any(x => x.Contains("believe"));

请注意,这不会检查单词列表中是否包含单词“believe” - 它会检查单词列表是否包含包含“相信”的单词。所以“信徒”会没事的。如果只是想检查列表是否包含believe,您可以使用:

bool hasBelieve = words.Contains("believe");

编辑:如果确实想要在没有lambda表达式的情况下执行此操作,您将需要基本上伪造lambda表达式(或匿名方法)为您执行的工作:

public class ContainsPredicate
{
    private readonly string target;

    public ContainsPredicate(string target)
    {
        this.target = target;
    }

    public bool Apply(string input)
    {
        return input.Contains(target);
    }
}

然后你可以使用:

Func<string, bool> predicate = new ContainsPredicate("believe");
bool hasBelieve = words.Any(predicate);

显然你真的不想那样做......

编辑:当然你可以使用:

var allBelieve = from word in words
                 where word.Contains("believe")
                 select word;

bool hasBelieve = allBelieve.Any();

但那也很难看 - 我肯定会使用lambda表达式。

答案 1 :(得分:0)

你可以这样做

string[] words = { "believe", "relief", "receipt", "field" };
var wd = (from wor in words
          where wor.Contains("believe")
          select wor);