using System.Collections.Generic; using System.Data; using System.Linq; using System.Web.Mvc; namespace Kreta.Web.Helpers.Extension { public static class DataSetExtensions { public static List CreateMvcGroupedSelectListItem(this DataSet ds, string keyColumn, string valueColumn, string groupNamesColumn, string groupOrderColumn = null) { DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null; if (dt == null) { return new List(); } EnumerableRowCollection dataRowList = dt.AsEnumerable(); if (!string.IsNullOrWhiteSpace(groupOrderColumn)) { dataRowList = dataRowList.OrderBy(x => x.Field(groupOrderColumn)); } var groups = dataRowList .GroupBy(x => x.Field(groupNamesColumn)) .Select(group => new KeyValuePair(group.Key, new SelectListGroup { Name = group.Key })) .ToDictionary(item => item.Key, item => item.Value); var result = dt.Rows .Cast() .Select(item => new SelectListItem { Group = groups[item.Field(groupNamesColumn)], Text = item.Field(valueColumn), Value = item.Field(keyColumn).ToString() }) .ToList(); return result; } public static List CreateMvcSelectListItem(this DataSet ds, string keyColumn, string valueColumn) { DataTable dt = ds.Tables.Count > 0 ? ds.Tables[0] : null; if (dt == null) { return new List(); } EnumerableRowCollection dataRowList = dt.AsEnumerable(); var result = dt.Rows .Cast() .Select(item => new SelectListItem { Text = item.Field(valueColumn), Value = item.Field(keyColumn).ToString() }) .ToList(); return result; } } }