diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement.slnx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement.slnx
new file mode 100644
index 00000000..736162c5
--- /dev/null
+++ b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement.slnx
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Data/Template.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Data/Template.docx
new file mode 100644
index 00000000..2e318c83
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Data/Template.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Generate-Loan-agreement.csproj b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Generate-Loan-agreement.csproj
new file mode 100644
index 00000000..2f0887c0
--- /dev/null
+++ b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Generate-Loan-agreement.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Exe
+ net8.0
+ Generate_Loan_agreement
+ enable
+ enable
+
+
+
+
+
+
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+
+
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/.gitkeep b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/.gitkeep
new file mode 100644
index 00000000..5f282702
--- /dev/null
+++ b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/.gitkeep
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10001.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10001.docx
new file mode 100644
index 00000000..8290cd8a
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10001.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10002.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10002.docx
new file mode 100644
index 00000000..3825c2e9
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10002.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10003.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10003.docx
new file mode 100644
index 00000000..e22193c8
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10003.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10004.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10004.docx
new file mode 100644
index 00000000..dc3a6916
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10004.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10005.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10005.docx
new file mode 100644
index 00000000..e59ff467
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10005.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10006.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10006.docx
new file mode 100644
index 00000000..ea84adcf
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/LoanAgreement_LA-2026-10006.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/Result.docx b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/Result.docx
new file mode 100644
index 00000000..56fbf7db
Binary files /dev/null and b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Output/Result.docx differ
diff --git a/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Program.cs b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Program.cs
new file mode 100644
index 00000000..2fb75ac5
--- /dev/null
+++ b/Mail-Merge/Generate-Loan-Agreement/.NET/Generate-Loan-agreement/Program.cs
@@ -0,0 +1,164 @@
+using Syncfusion.DocIO;
+using Syncfusion.DocIO.DLS;
+
+namespace Generate_loan_agreement
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ // Generate loan agreements with combined all records.
+ GenerateAgreementsDocuments();
+ // Generate individual agreement documents.
+ GenerateLoanAgreements();
+ }
+ ///
+ /// Generates loan agreement documents using mail merge from template.
+ /// Creates combined document with all records.
+ ///
+ public static void GenerateAgreementsDocuments()
+ {
+ using (FileStream fileStream = new FileStream(Path.GetFullPath(@"Data/Template.docx"), FileMode.Open, FileAccess.ReadWrite))
+ {
+ //Loads an existing Word document into DocIO instance.
+ using (WordDocument document = new WordDocument(fileStream, FormatType.Automatic))
+ {
+ //Gets the employee details as IEnumerable collection.
+ List agreementList = GetAgreementDeatils();
+ //Creates an instance of MailMergeDataTable by specifying MailMerge group name and IEnumerable collection.
+ MailMergeDataTable dataSource = new MailMergeDataTable("AgreementDetails", agreementList);
+ //Enable the boolean to remove empty paragraph and start each record in new page.
+ document.MailMerge.RemoveEmptyParagraphs = true;
+ document.MailMerge.StartAtNewPage = true;
+ //Performs Mail merge.
+ document.MailMerge.ExecuteGroup(dataSource);
+ //Creates file stream.
+ using (FileStream outputStream = new FileStream(Path.GetFullPath(@"../../../Output/Result.docx"), FileMode.Create, FileAccess.ReadWrite))
+ {
+ //Saves the Word document to file stream.
+ document.Save(outputStream, FormatType.Docx);
+ }
+ }
+ }
+ }
+ ///
+ /// Generates individual loan agreement documents, one document per record.
+ ///
+ public static void GenerateLoanAgreements()
+ {
+ string templatePath = Path.GetFullPath(@"Data/Template.docx");
+ string outputDir = Path.GetFullPath(@"../../../Output");
+ // Get all agreement details.
+ List agreementList = GetAgreementDeatils();
+ //Iterate each record and generate document.
+ foreach (var agreement in agreementList)
+ {
+ using (FileStream fileStream = new FileStream(templatePath, FileMode.Open, FileAccess.Read))
+ {
+ //Loads an existing Word document into DocIO instance.
+ using (WordDocument document = new WordDocument(fileStream, FormatType.Automatic))
+ {
+ // Create a list with single record
+ List singleRecord = new List { agreement };
+ // Create mail merge data source with single record
+ MailMergeDataTable dataSource = new MailMergeDataTable("AgreementDetails", singleRecord);
+ //Enable the boolean to remove empty paragraph.
+ document.MailMerge.RemoveEmptyParagraphs = true;
+ // Execute mail merge for this single record
+ document.MailMerge.ExecuteGroup(dataSource);
+ // Create unique filename using AgreementNumber
+ string fileName = $"LoanAgreement_{agreement.AgreementNumber}.docx";
+ string outputPath = Path.Combine(outputDir, fileName);
+ //Creates file stream.
+ using (FileStream outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.ReadWrite))
+ {
+ //Saves the Word document to file stream.
+ document.Save(outputStream, FormatType.Docx);
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// Gets the agreement details to perform mail merge.
+ ///
+ public static List GetAgreementDeatils()
+ {
+ List details = new List();
+ details.Add(new AgreementDetails("LA-2026-10001", "March 15, 2026", "California", "Jennifer Anderson", "2458 Sunset Boulevard, Apt 3B", "Los Angeles", "California", "90028", "+1-213-555-0142", "jennifer.anderson@email.com", "Home Loan - Fixed Rate", "$450,000", "6.75", "360","$2,918", "$2,250", "Residential Property", "3-bedroom house at 2458 Sunset Blvd, Los Angeles, CA", "$585,000", "April 15, 2026", "April 15, 2056", "2% of outstanding principal", "$75", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ details.Add(new AgreementDetails("LA-2026-10002", "March 10, 2026", "England", "James Mitchell", "47 Baker Street, Westminster", "London", "Greater London", "W1U 6TE", "+44-20-7946-0958", "james.mitchell@business.co.uk", "Business Expansion Loan", "£250,000", "7.50", "120", "£2,988", "£3,750", "Commercial Property", "Office space at 47 Baker Street, London", "£180,000", "April 10, 2026", "April 10, 2036", "3% of outstanding principal", "£50", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ details.Add(new AgreementDetails("LA-2026-10003", "March 12, 2026", "New South Wales", "Sarah Williams", "156 George Street, Level 8", "Sydney", "New South Wales", "2000", "+61-2-9876-5432", "sarah.williams@email.com.au", "Vehicle Loan - New Car", "AU$65,000", "8.25", "60", "AU$1,324", "AU$975", "Motor Vehicle", "2026 Toyota Camry Hybrid", "AU$65,000", "April 12, 2026", "April 12, 2031", "No prepayment penalty", "AU$40", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ details.Add(new AgreementDetails("LA-2026-10004", "March 8, 2026", "Ontario", "Michael Chen", "890 Bay Street, Suite 1205", "Toronto", "Ontario", "M5S 3A1", "+1-416-555-7890", "michael.chen@email.ca", "Personal Loan - Debt Consolidation", "CA$75,000", "9.50", "84", "CA$1,128", "CA$1,125", "Fixed Deposit", "Term deposit at TD Bank", "CA$30,000", "April 8, 2026", "April 8, 2033", "2.5% of outstanding principal", "CA$50", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ details.Add(new AgreementDetails("LA-2026-10005", "March 18, 2026", "Bavaria", "Emma Schmidt", "Maximilianstraße 45", "Munich", "Bavaria", "80539", "+49-89-1234-5678", "emma.schmidt@email.de", "Investment Property Loan", "€380,000", "5.85", "300", "€2,247", "€5,700", "Investment Property", "2-bedroom apartment at Maximilianstraße 45, Munich", "€480,000", "April 18, 2026", "April 18, 2051", "1.5% of outstanding principal", "€60", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ details.Add(new AgreementDetails("LA-2026-10006", "March 20, 2026", "Texas", "Robert Johnson", "1200 Commerce Street, Suite 400", "Dallas", "Texas", "75202", "+1-214-555-3456", "robert.johnson@startup.com", "Small Business Startup Loan", "$120,000", "10.25", "72", "$1,986", "$1,800", "Business Assets", "Office furniture, computers, and inventory", "$45,000", "April 20, 2026", "April 20, 2032", "3.5% of outstanding principal", "$85", DateTime.Today.ToString(), DateTime.Today.ToString(), DateTime.Today.ToString()));
+ return details;
+ }
+ }
+
+ ///
+ /// Represents a class to maintain agreement details.
+ ///
+ public class AgreementDetails
+ {
+ public string AgreementNumber { get; set; }
+ public string AgreementDate { get; set; }
+ public string State { get; set; }
+ public string BorrowerName { get; set; }
+ public string BorrowerAddress { get; set; }
+ public string BorrowerCity { get; set; }
+ public string BorrowerState { get; set; }
+ public string BorrowerZip { get; set; }
+ public string BorrowerPhone { get; set; }
+ public string BorrowerEmail { get; set; }
+ public string LoanProduct { get; set; }
+ public string LoanAmount { get; set; }
+ public string InterestRate { get; set; }
+ public string LoanTerm { get; set; }
+ public string MonthlyPayment { get; set; }
+ public string ProcessingFee { get; set; }
+ public string CollateralType { get; set; }
+ public string CollateralDescription { get; set; }
+ public string CollateralValue { get; set; }
+ public string RepaymentStartDate { get; set; }
+ public string MaturityDate { get; set; }
+ public string PrepaymentPenalty { get; set; }
+ public string LatePaymentFee { get; set; }
+ public string WitnessName { get; set; }
+ public string WitnessDate { get; set; }
+ public string BorrowerDate { get; set; }
+ public string LenderDate { get; set; }
+
+ public AgreementDetails(string agreementNumber, string agreementDate, string state, string borrowerName, string borrowerAddress, string borrowerCity, string borrowerState, string borrowerZip, string borrowerPhone, string borrowerEmail, string loanProduct, string loanAmount,
+ string interestRate, string loanTerm, string monthlyPayment, string processingFee, string collateralType, string collateralDescription, string collateralValue, string repaymentStartDate, string maturityDate, string prepaymentPenalty, string latePaymentFee, string witnessDate, string borrowerDate, string lenderDate)
+ {
+ AgreementNumber = agreementNumber;
+ AgreementDate = agreementDate;
+ State = state;
+ BorrowerName = borrowerName;
+ BorrowerAddress = borrowerAddress;
+ BorrowerCity = borrowerCity;
+ BorrowerState = borrowerState;
+ BorrowerZip = borrowerZip;
+ BorrowerPhone = borrowerPhone;
+ BorrowerEmail = borrowerEmail;
+ LoanProduct = loanProduct;
+ LoanAmount = loanAmount;
+ InterestRate = interestRate;
+ LoanTerm = loanTerm;
+ MonthlyPayment = monthlyPayment;
+ ProcessingFee = processingFee;
+ CollateralType = collateralType;
+ CollateralDescription = collateralDescription;
+ CollateralValue = collateralValue;
+ RepaymentStartDate = repaymentStartDate;
+ MaturityDate = maturityDate;
+ PrepaymentPenalty = prepaymentPenalty;
+ LatePaymentFee = latePaymentFee;
+ WitnessDate = witnessDate;
+ BorrowerDate = borrowerDate;
+ LenderDate = lenderDate;
+ }
+ }
+}
+