Here is an example passing the key to check
private void HasDuplicatesDemo(string identifier)
{
var tblData = new DataTable();
tblData.Columns.Add("EMPNO", typeof(string));
tblData.Columns.Add("NAME", typeof(string));
tblData.Columns.Add("DEPT", typeof(string));
tblData.Columns.Add("CATEGORY", typeof(string));
tblData.Rows.Add("AM-101", "RAFEEK", "CA-12-MM", "BOLD");
tblData.Rows.Add("AM-101", "RAFEEK", "CA-13-AB", "NEW");
tblData.Rows.Add("AM-101", "RAFEEK", "CA-13-AB", "NEW");
tblData.Rows.Add("AM-102", "MANA", "CA-12-MM", "CESS");
tblData.Rows.Add("AM-102", "MANA", "CA-12-MM", "CESS");
tblData.Rows.Add("AM-102", "MANA", "CA-13-XL", "REVERSE");
tblData.Columns.Add("ID", typeof(string)).Expression = "EMPNO +NAME";
tblData.Columns["ID"].SetOrdinal(0);
bool hasDuplicates1 = tblData.AsEnumerable().Where(row => row.Field<string>("ID") == identifier)
.GroupBy(row => row[0]).Any(gr => gr.Count() > 1);
Console.WriteLine($"From {nameof(HasDuplicatesDemo)}: {hasDuplicates1}");
}
private void HasNoDuplicatesDemo(string identifier)
{
var tblData = new DataTable();
tblData.Columns.Add("EMPNO", typeof(string));
tblData.Columns.Add("NAME", typeof(string));
tblData.Columns.Add("DEPT", typeof(string));
tblData.Columns.Add("CATEGORY", typeof(string));
tblData.Rows.Add("AM-101", "RAFEEK", "CA-12-MM", "BOLD");
tblData.Rows.Add("AM-102", "MANA", "CA-12-MM", "CESS");
tblData.Columns.Add("ID", typeof(string)).Expression = "EMPNO +NAME";
tblData.Columns["ID"].SetOrdinal(0);
bool hasDuplicates1 = tblData.AsEnumerable().Where(row => row.Field<string>("ID") == identifier)
.GroupBy(row => row[0]).Any(gr => gr.Count() > 1);
Console.WriteLine($"From {nameof(HasNoDuplicatesDemo)}: {hasDuplicates1}");
}
Click event
private void runButton_Click(object sender, EventArgs e)
{
HasDuplicatesDemo("AM-101RAFEEK");
HasNoDuplicatesDemo("AM-101RAFEEK");
}
Then in the second example let's be clear
private void HasNoDuplicatesDemo(string identifier)
{
var tblData = new DataTable();
tblData.Columns.Add("EMPNO", typeof(string));
tblData.Columns.Add("NAME", typeof(string));
tblData.Columns.Add("DEPT", typeof(string));
tblData.Columns.Add("CATEGORY", typeof(string));
tblData.Rows.Add("AM-101", "RAFEEK", "CA-12-MM", "BOLD");
tblData.Rows.Add("AM-102", "MANA", "CA-12-MM", "CESS");
tblData.Columns.Add("ID", typeof(string)).Expression = "EMPNO +NAME";
tblData.Columns["ID"].SetOrdinal(0);
bool hasDuplicates1 = tblData.AsEnumerable().Where(row => row.Field<string>("ID") == identifier)
.GroupBy(row => row[0]).Any(gr => gr.Count() > 1);
Console.WriteLine($"From {nameof(HasNoDuplicatesDemo)}: {hasDuplicates1 == false}");
}
You can also create an extension method
using System.Data;
using System.Linq;
namespace CommonExtensions
{
public static class DataTableExtensions
{
/// <summary>
/// Determine if the DataTable has duplications based on a column
/// where the column may be a concatenation of two or more columns
/// </summary>
/// <param name="sender">DataTable to check for duplicates</param>
/// <param name="columnName">Column name to check, if column does not exists a runtime exception is thrown</param>
/// <param name="identifier">Value in columnName</param>
/// <returns></returns>
public static bool HasDuplicates(this DataTable sender, string columnName, string identifier) =>
sender.AsEnumerable()
.Where(row => row.Field<string>(columnName) == identifier)
.GroupBy(row => row[0]).Any(gr => gr.Count() > 1);
}
}
Usage
Console.WriteLine($"From {nameof(HasNoDuplicatesDemo)}: {tblData.HasDuplicates("ID", "AM-101RAFEEK")}");