2014-02-13 65 views
0

在My LINQ查詢中我使用Where子句來檢查屬性是否存在於數組數組中。我想更新查詢:使用'StartsWith'與數組進行LINQ查詢

string[] itemColour 
string[] itemType 

List<displayItem> displayItems = (from item in allItems 
            Where itemColour.Contains(item.colour) 
            Where itemType.Contains(item.type) 
            select new displayItem 
            ......................etc...etc 

所以我有什麼是

「我在哪裏‘itemColour’數組包含這個‘item.colour’中選擇」

「我在哪裏「ITEMTYPE」數組包含此「項目。形式」中選擇」

什麼我後

「我在哪裏‘itemColour’數組有一個項目‘item.colour’在任何地方選擇它
」我在哪裏‘ITEMTYPE’陣列具有與‘項目。形式’開頭的項目選擇它

我我不知道'StartsWith'和'EndsWith',但不知道如何將它們用於這些數組。

注: itemColour可能包含有顏色代碼「RGW」我希望能夠基於任何三個字母的

更新

的,選擇這一項項建議的解決方案:

var query = from item in allItems 
     where itemColour.Any(c => c.Contains(item.colour)) 
      && itemType.Any(t => t.StartsWith(item.type) 
     select ...; 

有問題。如果我試圖帶回顏色代碼'RB'的項目。 我的數組可能包含兩個項目「R」和「B」,建議的查詢僅返回帶有顏色代碼「R」或「B」不是兩者的項目。

我使用MVC 5,LINQ到實體,.NET 4.5

感謝

回答

5

我懷疑你正在尋找Any,它允許你檢查是否序列中的任何項目(本例中的陣列)與謂詞匹配:

var query = from item in allItems 
      where itemColour.Any(c => c.Contains(item.colour)) 
       && itemType.Any(t => t.StartsWith(item.type) 
      select ...; 

根據您擁有的顏色條目數量和確切的語義,存在潛在的優化。

如果你想找到匹配顏色類型或者哪些項目,使用||代替:

var query = from item in allItems 
      where itemColour.Any(c => c.Contains(item.colour)) 
       || itemType.Any(t => t.StartsWith(item.type) 
      select ...; 

編輯:您的描述是不明確的,但它是完全可能的,你真正想要的:

itemColour.Any(c => item.colour.Contains(c)) 

改爲。邏輯思考你想要檢查什麼,並適當地應用它。

+0

謝謝任何​​我需要的。但是這個查詢沒有產生我期望的結果。我會編輯我的問題 – user2390419

+0

@ user2390419:沒有任何更多的信息,我們不能幫你。你是否想'''而不是'&&'? (換句話說,你是否試圖找到匹配*要求而不是*兩者*的項目?) –

+0

嗨,感謝您的幫助我已更新我的問題,我的問題是包含似乎不工作相同像''' – user2390419

2

喜歡的東西:

from item in allItems 
where itemColour.Any(x => x.Contains(item.colour)) 
where itemType.Any(x => x.StartsWith(item.type)) 
select new displayItem