LINQ: Как объединить вложенные списки в ObjectCollection - PullRequest
2 голосов
/ 16 июля 2010

возможно ли определить оператор LINQ для следующих проблем БЕЗ использования цикла foreach?

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

При написании этого вопроса я нашел решение проблем.Я все еще опубликую (и отвечу) вопрос, так как этот был для меня настоящим провалом.И я не нашел подходящего существующего вопроса здесь.

Ciao, Juve

Ответы [ 2 ]

4 голосов
/ 16 июля 2010

Я считаю, что эту проблему можно решить с помощью SelectMany и Distinct!

var allLetters = myGroups.SelectMany(go => go.letters);
var allUniqueLetters = allLetters.Distinct();

Имя второй переменной вводит в заблуждение.Он вернет, среди прочего, один экземпляр "m", который был не уникальным в исходной коллекции;)

0 голосов
/ 16 июля 2010

Как сказано выше, я нашел ответ сам:

List<string> allLetters = (from g in myGroups from l in g.letters select l).ToList();
List<string> allDistinctLetters = allLetters.Distinct().ToList();

Надеюсь, это кому-нибудь пригодится.

Чао, Юве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...