Lambda Linq with Join and separate Where

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		var data = GenData();
		string searchKeyWord = "Jo";
		
		//Linq Join
		/*var result = from c in data.memberToPapers
			join s in data.members on c.MemberId equals s.id
			where c.Role == "TestRole1"
			select new {
				ConferenceId = c.ConferenceId,
				PaperId = c.PaperId,
				Role = c.Role,
				JoinedName = s.Name
			};*/
		
		//Lambda Join
		var result = data.memberToPapers
			.Where(y => y.Role == "TestRole1" )
			.Join(data.members, c => c.MemberId, s => s.id, (c, s) => new  
			{
				ConferenceId = c.ConferenceId,
				PaperId = c.PaperId,
				Role = c.Role,
				JoinedName = s.Name
			});
		foreach(var m in result) 
		{
			Console.WriteLine("Before Where Result: ( ConferenceId = {0}, PaperId = {1}, Role = {2}, JoinedName = {3} )", m.ConferenceId.ToString(), m.PaperId.ToString(), m.Role, m.JoinedName);
		}
		Console.WriteLine("=====================");
		if(!string.IsNullOrEmpty(searchKeyWord)) 
		{
			result = result.Where(x => x.JoinedName.Contains(searchKeyWord));
		}
		foreach(var m in result) 
		{
			Console.WriteLine("After Where Result: ( ConferenceId = {0}, PaperId = {1}, Role = {2}, JoinedName = {3} )", m.ConferenceId.ToString(), m.PaperId.ToString(), m.Role, m.JoinedName);
		}
	}
	
	public static TestDataSet GenData()
	{
		TestDataSet ret = new TestDataSet();
		ret.members.Add(new Members() 
		{
			id = 1,
			Name = "John"
		});
		ret.members.Add(new Members() 
		{
			id = 2,
			Name = "Gino"
		});
		ret.members.Add(new Members() 
		{
			id = 3,
			Name = "Phill"
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 1,
			PaperId = 2,
			Role = "TestRole1",
			MemberId = 1
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 1,
			PaperId = 3,
			Role = "TestRole1",
			MemberId = 1
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 2,
			PaperId = 5,
			Role = "TestRole2",
			MemberId = 2
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 1,
			PaperId = 9,
			Role = "TestRole3",
			MemberId = 3
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 3,
			PaperId = 88,
			Role = "TestRole2",
			MemberId = 3
		});
		ret.memberToPapers.Add(new MemberToPapers()
		{
			id = 1,
			ConferenceId = 2,
			PaperId = 7,
			Role = "TestRole1",
			MemberId = 2
		});
		return ret;
	}
}

public class TestDataSet 
{
	public List<MemberToPapers> memberToPapers;
	public List<Members> members;
	public TestDataSet()
	{
		memberToPapers = new List<MemberToPapers>();
		members = new List<Members>();
	}
}

public class MemberToPapers 
{
	public int id {get;set;}
	public int ConferenceId {get;set;}
	public int PaperId {get;set;}
	public string Role {get;set;}
	public int MemberId {get;set;}
}

public class Members 
{
	public int id {get;set;}
	public string Name {get;set;}
}
;