是否可以在不使用foreach循环的情况下为以下问题定义LINQ语句?
public class GroupObject
{
public String name;
public List<String> letters;
public void test()
{
List<GroupObject> myGroups = new List<GroupObject> {
new GroupObject {
name="test1",
letters=new List<String>{"x","y","z"}
},
new GroupObject {
name="test2",
letters=new List<String>{"l","m","n"}
},
new GroupObject {
name="test3",
letters=new List<String>{"m","x","z"}
}
};
// LINQ problem 1: how to get a list of all 9 letters
// List<string> allLetters = (from ...).ToList();
// LINQ problem 2: how to get a list of all 6 DISTINCT letters
// List<string> allDistictLetters = (from ...).ToList();
}
}
在写这个问题时,我找到了问题的解决方案。我仍然会发布(并回答)这个问题,因为这个问题对我来说真的很糟糕。我在这里找不到合适的现有问题。
侨, 尤文
答案 0 :(得分:4)
我相信SelectMany
和Distinct
可以解决这个问题!
var allLetters = myGroups.SelectMany(go => go.letters);
var allUniqueLetters = allLetters.Distinct();
第二个变量名称是误导性的。除其他字母外,它将返回"m"
的一个实例,该实例在原始集合中不唯一;)
答案 1 :(得分:0)
如上所述,我自己找到了答案:
List<string> allLetters = (from g in myGroups from l in g.letters select l).ToList();
List<string> allDistinctLetters = allLetters.Distinct().ToList();
我希望这对某人有用。
Ciao,Juve