2012-04-24 33 views
0

我有一個實體列表,其中包含搜索詞,點擊等。
用戶應該能夠比較實體之間的點擊量 - 即所有包含單詞「免費樣本」的實體開始搜索,並與包含短語「逮捕我」的短語結尾的所有實體進行比較。
我可以做到這一點與多個foreach和開關(因爲用戶選擇查詢和字符串的一部分),但我明白,通過使用Linq我可以使用「開始」和「結束」功能。你能指導我通過嗎?Linq中的代表

+6

你可以發表一些代碼,使其更清晰你有什麼? – NibblyPig 2012-04-24 13:46:18

+0

@ChenBiran: 不客氣。此外,由於您是StackOverflow的新用戶,因此我想告訴您,您可以通過查看答案旁邊的勾號來獲得最佳答案並接受最能幫助您的答案。在這個網站上upvote或接受的答案算作「謝謝」。 – 2012-05-04 18:19:38

回答

1

LINQ Where()返回一組實體滿足條件:

var filtered = entities.Where(e => 
         e.SearchPattern.StartsWith("Start") 
         && 
         e.SearchPattern.EndsWith("End")); 

LINQ Single()/SingleorDefault()返回滿足條件,如果超過一個發現一個單一的實體 - 將會拋出異常。

var filtered = entities.Single(e => 
         e.SearchPattern.StartsWith("Start") 
         && 
         e.SearchPattern.EndsWith("End")); 

LINQ First()/Last()返回第一/最後的實體爲給定的條件......

var filtered = entities.First(e => 
          e.SearchPattern.StartsWith("Start") 
          && 
          e.SearchPattern.EndsWith("End")); 

的完整列表,請參閱Enumerable class methods

1

這聽起來像你想的事情的清單從「免費樣品」開始,然後以「逮捕我」結束。假設這就是你想要的,你會做這樣的事情。

// Assumes myStuff is where all of your data is right now 
var startsWith = myStuff.Where(x => x.MyString.StartsWith("free sample")); 
var endsWith = myStuff.Where(x => x.MyString.EndsWith("arrest me")); 

// Now you can do whatever comparisons between the two lists you need 

當然,如果你只是想他們都以「免費樣品」開始和結束「抓我」你可以做到這一點

var hasBoth = myStuff.Where(x => x.MyString.StartsWith("free sample") && x.MyString.EndsWith("arrest me")) 
0

你提到的功能只是字符串功能。 s.StartsWith("abc")s.EndsWith("xyz")。在LINQ查詢中,您可以在where子句中使用它們。

var startIndexes = phrases 
    .Where(p => p.StartsWith("free sample") 
    .Select((p, i) => i); 

var endIndexes = phrases 
    .Where(p => p.EndsWith("arrest me") 
    .Select((p, i) => i); 

這兩個查詢返回開始短語的指標,分別具有一定的字符串結束。我使用接受索引作爲第二個參數的選擇的重載。