2015-12-25 21 views
1

因爲原因而重命名了類名。但請假設這是類結構的樣子。LINQ從表中有條件地選擇並將多個列作爲單個列表返回

public class Animal{ 
    public List<Cat> getCatsandKitten(); 
    { 
    ... 
    } 
} 

public class Cat { 
    public Kitten kitten; 
} 

public class Kitten{ 
    public string name; 
    public string nickname; 
} 

//assume this returns a list of cats and populates each Cat class with kitten values. Also ignore any syntax issues. 
var animals = getCatsandKitten(); 

問:

我如何返回LINQ查詢返回包含名稱或所有小貓的暱稱列表或值的數組。 例子:給我他的名字或暱稱包含湯姆

這裏是我的查詢到目前爲止的所有小貓的列表:

List<String> listOfKittens = animals 
    .SelectMany(i => i.Cat 
     .Where(m=>m.name.Contains("Tom") || m.nickname.Contains("Tom")) 
     .SelectMany(s => new[] { s.name, s.nickname }) 
    ); 

這不工作,因爲我要回兩個列(名字和暱稱)這意味着即使名稱上有一個匹配項,也會返回兩個值。

在此先感謝。

+0

請注意'Kitten'是一個'Cat',或將來會成爲一隻貓......它們都有名字,暱稱和其他類似的屬性。對我來說,它看起來就像是一個單一的實體,應該是一個樹狀結構:'公貓*]小貓{get;組; }'。恕我直言。 –

+0

對不起,我給了一個壞榜樣。我因爲理由而改變了類名,但假設這是類的結構。我將如何查詢它? –

回答

0

互換WhereSelectMany順序和查詢將正常工作:首先讓所有的所有的小貓namenickname屬性,那麼只能選擇那些包含字符串Tom

List<String> listOfKittens = animals 
    .SelectMany(i => i.Cat 
     .SelectMany(s => new[] { s.name, s.nickname }) 
     .Where(m => m.Contains("Tom"))  
    ).ToList(); 
+0

不錯。爲我的場景完美工作。非常感謝Claudiu –