Запросите Список Списка Объектов в LINQ c#

Я немного плохо знаком с LINQ, вот моя проблема.

  • У меня есть Список Списка Объектов
  • Мне нравится получать Объекты, которые присутствуют только в одном Списке (и если я мог бы получить Список, в котором они, не повторяя через "список списка", который был бы большим).

Я пытаюсь без успеха использовать Агрегат / Кроме / ключевые слова Группы в запросе Linq, но ничем близко к решению до сих пор.

[РЕДАКТИРОВАНИЕ] Могло быть, например, List<List<int>> и условие, которое значение интервала, не находится в других списки.

Быть честным, если я попробовал несколькими foreach Я успешно выполняюсь для нахождения объектов значения, но поскольку я пытаюсь изучить LINQ, который я хотел бы знать, какой запрос я должен записать для получения результатов

например,

 1,2,6
 1,6
 3,5
 5,10
 3,10,6

возвратится 2 и первый список

13
задан call me Steve 8 May 2010 в 17:50
поделиться

5 ответов

var query = from list in lists
            from value in list
            where lists.Where(l => l.Contains(value)).Any()
            select new { List = list, Value = value };
15
ответ дан 1 December 2019 в 22:56
поделиться
from lst in lists
from i in lst
group lst by i into grp
where grp.Count() == 1
select new { Value = grp.Key, List = grp.Single() };

Это даст вам числа, которые появляются только в 1 списке, вместе со списком, который его содержит

РЕДАКТИРОВАТЬ: немного упрощено

2
ответ дан 1 December 2019 в 22:56
поделиться
var sets = new[] { "1,2,6", "1,6", "3,5,9", "5,10", "3,10,6" };

var grouped = sets.SelectMany(i => i.Split(','))
                  .GroupBy(i => i)
                  .Where(i => i.Count() == 1)
                  .Select(i => i.Key);

Console.WriteLine(string.Join(", ", grouped.ToArray())); //2, 9
1
ответ дан 1 December 2019 в 22:56
поделиться

Это даст вам уникальные целые числа:

var ints = listOfLists.SelectMany(l => l);
var uniques = ints.Where(i => ints.Count(val => val == i) == 1);
2
ответ дан 1 December 2019 в 22:56
поделиться

Похоже, я пришел к тому же решению, что и Томас, только используя функциональный синтаксис...

var uniques = listlist.SelectMany(l => l.Select(i => new {Item = i, Origin = l}))
                      .GroupBy(i => i.Item)
                      .Where(g => g.Count() == 1)
                      .Select(g => g.First());

Обратите внимание, что все наши решения предполагают, что числа внутри каждого списка уже различны; т.е. если один список содержит повторяющееся значение, которого нет ни в одном из других, он все равно будет отклонен.

0
ответ дан 1 December 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: