在列表中添加对象的两个变量

时间:2013-04-23 01:07:44

标签: c# .net linq

我有一份关于" ean"和" eanAlt"属性。

这有效:

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,但无法找到)

2 个答案:

答案 0 :(得分:4)

要使用SelectMany,您需要先将eaneanAlt转换为列表:

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

答案 1 :(得分:3)

您的代码可以为ean中的每个元素选择eanAlttoGroup。我想要得到完全相同的行为,你必须做这样的事情:

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));