出于理由重命名了类名。但请假设这是类结构的样子。
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 })
);
这不起作用,因为我正在返回两个列(名称和昵称),这意味着即使名称上有一个匹配项,也会返回两个值。
提前致谢。
答案 0 :(得分:0)
交换Where
和SelectMany
的顺序,查询将正常运行:首先获取所有小猫的所有name
和nickname
属性,然后只选择那些其中包含字符串Tom
。
List<String> listOfKittens = animals
.SelectMany(i => i.Cat
.SelectMany(s => new[] { s.name, s.nickname })
.Where(m => m.Contains("Tom"))
).ToList();