2011-12-14 4 views
0

が含まれています(動作しない)以下のための非ラムダExpressでのLINQを行うにはどうすればよい:LINQは

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

この質問のようにそれを行うことは、ここで求められているように見えます:http://stackoverflow.com/questions/1566439/linq-help-with-contains-and -a-lambda-query – Dessus

答えて

3

それはあなたがfrom wor in words select worがやっていると信じて良いものをはっきりしていません - それは本当にあなたを助けてくれていません。

なぜあなたはでないのか分かりません。はラムダ式を使いたいと思います。明白なアプローチがある:これは単語のリストは、言葉では「信じる」があるかどうかをチェックされていないことを

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

注 - 単語のリストが「信じる」を含む任意の単語を持っているかどうかをチェックしていますが。だから "信者"は大丈夫でしょう。

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

EDIT:あなた本当には、ラムダ式なしでそれをしたい場合は、基本的に偽の作業を行う必要がありますが、あなたはだけリストはあなただけ使用することができますbelieve含まれているかどうかを確認したい場合ラムダ式(または匿名メソッドは)あなたのためにすること:

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); 

明らかにあなたが本当にかかわらず...

がEDITことを行うにはしたくない:もちろんあなたでき使用:

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

bool hasBelieve = allBelieve.Any(); 

しかし、それはあまりにもかなり醜いです - 私は間違いなく、ラムダを使用したいが表現。

+0

Jonに感謝します。私はそれがどのように行われているかを見たいので、非ラムダでどうやってやれますか? –

+0

@NatePet:私の編集を参照してください。しかし、あなたが意味するものであるかどうかは本当にはっきりしません。あなたは「非ラムダ」によって何を思いついたのですか? –

0

あなたは非常に似ていること

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