using System.Data.DataSetExtensions;
using System.Collections.Generic;
public static void Main()
const string columnName = "SearchColumn";
var dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn(columnName));
var row = dataTable.NewRow();
row[columnName] = "Fiscal";
row = dataTable.NewRow();
row[columnName] = "Fiscal Auditor";
row = dataTable.NewRow();
row[columnName] = "Ignore this";
var subSet = SearchAndSortData(dataTable, columnName, "Fiscal Auditor");
Console.WriteLine(subSet.Count() == 2);
Console.WriteLine(subSet.First().Field<string>(columnName) == "Fiscal Auditor");
public static IEnumerable<DataRow> SearchData(DataTable data, string columnName, string queryString)
var query = new HashSet<string>(queryString.Split(' '));
return data.AsEnumerable().Where(row => row.Field<string>(columnName).Split(' ').Any(substring => query.Contains(substring)));
public static IEnumerable<DataRow> SearchAndSortData(DataTable data, string columnName, string queryString)
var query = new HashSet<string>(queryString.Split(' '));
var filteredData = data.AsEnumerable().Where(row => row.Field<string>(columnName).Split(' ').Any(substring => query.Contains(substring)));
return filteredData.OrderByDescending(row => row.Field<string>(columnName).Split(' ').Where(substring => query.Contains(substring)).Count());