using System.Collections.Generic;
using System.Threading.Tasks;
public int Id { get; set; }
public string Question { get; set; }
public int Id { get; set; }
public string Type { get; set; }
public int TypeId { get; set; }
public void Main(string[] args)
var likesData = new List<Like>
new Like { Id = 1, Type = "Faq", TypeId = 1 },
new Like { Id = 2, Type = "Faq", TypeId = 1 },
new Like { Id = 3, Type = "Faq", TypeId = 1 },
new Like { Id = 4, Type = "Faq", TypeId = 2 },
new Like { Id = 5, Type = "User", TypeId = 2 },
var faqsData = new List<Faq>
new Faq { Id = 1, Question = "Sample Question 1" },
new Faq { Id = 2, Question = "Sample Question 2" }
var records = (from faq in faqsData
join likes in likesData on new { FaqId = faq.Id, Type = "Faq" } equals new { FaqId = likes.TypeId, likes.Type }
group faq.Id by likes.TypeId into groupedLikes
FaqId = groupedLikes.Key,
Likes = groupedLikes.ToList()
records.ToList().ForEach(x => Console.WriteLine(string.Format("FaqId: {0} has {1} likes", x.FaqId, x.Likes.Count)));