2013-04-23 44 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

相关问题