Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ按条件获取分组ID_Linq_Group By_Contains - Fatal编程技术网

LINQ按条件获取分组ID

LINQ按条件获取分组ID,linq,group-by,contains,Linq,Group By,Contains,嗨,我有一份清单,所以: A 1 A 2 A 3 A 4 B 1 B 2 C 1 A 1 A 2 A 3 A 4 B 1 B 2 C1 我想选择至少包含以下3个数字的字母:1,2,3 因此,在这种情况下,将选择字母A 你能帮我把这个写成LINQ表达式吗 非常感谢 首先,收集您需要的数字 var required = new[] { 1, 2, 3 }; 然后,按字母将配对分组 var groupedPairings = pairings.GroupBy

嗨,我有一份清单,所以:

A 1 A 2 A 3 A 4 B 1 B 2 C 1 A 1 A 2 A 3 A 4 B 1 B 2 C1 我想选择至少包含以下3个数字的字母:1,2,3

因此,在这种情况下,将选择字母A

你能帮我把这个写成LINQ表达式吗


非常感谢

首先,收集您需要的数字

var required = new[] { 1, 2, 3 };
然后,按字母将配对分组

var groupedPairings = pairings.GroupBy(p => Letter, p => Number);
然后,丢弃那些没有三个必需项的配对。(这里的逻辑是“获取所需项目的集合,删除组中的任何内容,并确保没有剩余内容”。)

现在,如果你只是想要这些字母,你可以简单地做

var lettersWithRequired = groupsWithRequired.Select(g => g.Key);
或者,如果您想要一个从字母到数字集合的字典映射,您可以这样做

var dictionary = groupsWithRequired.ToDictionary(g => g.Key, g => g.ToArray());
var numbersForA = dictionary["A"]; // = {1, 2, 3, 4}

你可以试试这个,尽管我觉得这不是最好的答案:

var items = new List<Item>{ 
    new Item{Name="A", Value=1},
    new Item{Name="A", Value=2},
    new Item{Name="A", Value=3},
    new Item{Name="A", Value=3},
    new Item{Name="A", Value=4},
    new Item{Name="B", Value=1},
    new Item{Name="B", Value=2},
    new Item{Name="C", Value=1},
};

var values = new List<int>{1,2,3};

var query = items.GroupBy (i => i.Name)
                 .Where (i => i.Select (x => x.Value)
                               .Intersect(values).Count() == values.Count)
                 .Select (i => i.Key);
var items = new List<Item>{ 
    new Item{Name="A", Value=1},
    new Item{Name="A", Value=2},
    new Item{Name="A", Value=3},
    new Item{Name="A", Value=3},
    new Item{Name="A", Value=4},
    new Item{Name="B", Value=1},
    new Item{Name="B", Value=2},
    new Item{Name="C", Value=1},
};

var values = new List<int>{1,2,3};

var query = items.GroupBy (i => i.Name)
                 .Where (i => i.Select (x => x.Value)
                               .Intersect(values).Count() == values.Count)
                 .Select (i => i.Key);
class Item{
    public string Name{get;set;}
    public int Value{get;set;}
}