2011-12-14 62 views
0

你怎麼做的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-查詢 – Dessus 2011-12-14 21:35:26

回答

3

目前還不清楚,你相信什麼好from wor in words select wor在做什麼 - 它根本沒有幫助你。

這也不清楚爲什麼你不要想要使用lambda表達式。最明顯的做法是:

bool hasBelieve = words.Any(x => x.Contains("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(); 

但是,這是很醜陋,太 - 我肯定會使用拉姆達表達。

+0

感謝Jon,你怎麼能用非lamda來做,因爲我喜歡看它是如何完成的。 – 2011-12-14 21:30:38

0

你可以那樣做

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