查询LINQ中的项列表列表c#

时间:2010-05-08 17:18:46

标签: c# linq

我对LINQ有点新意,这是我的问题。

  • 我有一个项目清单
  • 我喜欢收到礼物 只有一个清单(如果我能得到的话 他们没有的名单 重新遍历“清单” 列出“那会很棒。”

我试图在Linq查询中使用Aggregate / Except / Group关键字但没有成功,但到目前为止没有任何接近解决方案。

[编辑] 可能是例如List<List<int>>以及int的值不在其他列表中的条件。

老实说,如果我尝试了几个foreach我成功找到了值项,但是当我想学习LINQ时,我想知道我应该写什么样的查询来获得结果

例如

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

将返回2和第一个列表

5 个答案:

答案 0 :(得分:15)

var query = from list in lists
            from value in list
            where lists.Where(l => l.Contains(value)).Any()
            select new { List = list, Value = value };

答案 1 :(得分:2)

这将为您提供唯一的整数:

var ints = listOfLists.SelectMany(l => l);
var uniques = ints.Where(i => ints.Count(val => val == i) == 1);

答案 2 :(得分:2)

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个列表中的数字,以及包含它的列表

编辑:简化了一下

答案 3 :(得分:1)

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

答案 4 :(得分:0)

看起来我想出了与Thomas相同的解决方案,只使用了函数式语法......

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

请注意,我们所有的解决方案都假设每个列表中的数字已经不同;即如果单个列表包含不在其他任何列表中的重复值,它仍然会被拒绝。