如何使用非lambda表达Linq以下(不起作用):
string[] words = { "believe", "relief", "receipt", "field" };
var wd = (from word in words
select word).Any(Contains ("believe"));
答案 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);