LINQ条件从表中选择并返回多列作为单个列表

时间:2015-12-25 03:57:39

标签: 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查询,该查询返回包含所有小猫的名称或昵称的列表或数组。 示例:获取名称或昵称包含Tom

的所有小猫的列表

到目前为止,这是我的查询:

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

这不起作用,因为我正在返回两个列(名称和昵称),这意味着即使名称上有一个匹配项,也会返回两个值。

提前致谢。

1 个答案:

答案 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();