using System.Collections;
using System.Collections.Generic;
public static void Intersection(List<MeasureFilter> data, List<int> measureIds)
var filterIDs = data.Where(x => measureIds.Contains(x.MeasureID))
.GroupBy(x => x.MeasureID).Select(x => x.Select(y => y.FilterID))
.Aggregate((a, b) => a.Intersect(b)).ToList();
Console.WriteLine(string.Join(",", measureIds) + ":\t" + string.Join(",", filterIDs));
public class MeasureFilter
public MeasureFilter(int MeasureID, int FilterID)
this.MeasureID = MeasureID;
this.FilterID = FilterID;
public int MeasureID { get; set; }
public int FilterID { get; set; }
public static void Main()
var data = new List<MeasureFilter>{
Intersection(data, new List<int> { 3, 4 });
Intersection(data, new List<int> { 3, 4, 5 });
Intersection(data, new List<int> { 4 });