2013-04-23 75 views
1

我有一個具有「ean」和「eanAlt」屬性的objet列表。在列表中添加一個objet的兩個變量

這工作:

List<string> eanList = new List<string>(); 
eanList.AddRange(toGroup.Where(a => a.ean.Length > 0).Select(b => b.ean).ToArray()); 
eanList.AddRange(toGroup.Where(a => a.eanAlt.Length > 0).Select(b => b.eanAlt).ToArray()); 

但我怎麼能做到這一點在一個查詢? (我想用SelectMany,但無法找到)

謝謝。

回答

4

要使用SelectMany需要轉換eaneanAlt先列出:

eanList = toGroup 
     .SelectMany(a => new List<string> { a.ean, a.alt }) 
     .Where(s => !string.IsNullOrEmpty(s)) 
     .ToList(); 
+0

+1這工作,但我想指出,你真的不需要'ToList',因爲'AddRange'需要一個'IEnumerable' 。 – 2013-04-23 01:22:50

3

您的代碼可以爲toGroup中的每個元素選擇eaneanAlt。我想,讓你不得不做這樣的事情完全一樣的行爲:

eanList.AddRange(
    from a in toGroup 
    from b in new[] { a.ean, a.eanAlt } 
    where b.Length > 0 
    select b); 

ToArray是不必要在這裏。

或者如果你喜歡流暢的語法,你可以做到這一點(雖然我認爲這使得它稍微不太清楚是怎麼回事):

eanList.AddRange(toGroup.SelectMany(a => new[] { a.ean, a.eanAlt }).Where(b => b.Length > 0)); 
+0

+1:'from'是不錯的:) – 2013-04-23 01:19:55

相關問題