自定义选择C#中的DataTable列
本文关键字:DataTable 中的 选择 自定义 | 更新日期: 2023-09-27 18:21:58
我想选择DataTable
中以C#中给定字母开头的列。我必须使用Sort Property
。我只找到了如何对它们进行升序或降序排序。
排序的结果应该等效于以LIKE 'l%'
、l
作为参数的sql select语句。我可以使用Substring提取第一个字母,但如何使用它?谢谢
DataView dv= employees.DefaultView;
dv.Sort="ColumnName asc";
employees = dv.ToTable();
附言:也找到了关于RowFilter
属性的,但我需要使用"排序"。
很抱歉第一次讲得不太清楚。
您可以改用LINQ To DataTable:
employees = employees.AsEnumerable()
.OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
.CopyToDataTable();
请注意,您需要在文件的顶部添加using System.Linq
。
也许您发现查询语法更可读:
var rows = from row in employees.AsEnumerable()
let value = row.Field<string>("ColumnName")
orderby value.FirstOrDefault()
select row;
employees = rows.CopyToDataTable();
UPDATE:"排序后,我只需要选择以给定字母开头的字母"
那么您可能想要过滤记录,因此使用Enumerable.Where
:
所以要么:
employees = employees.AsEnumerable()
.Where(row => row.Field<string>("ColumnName").StartsWith("A", StringComparison.CurrentCultureIgnoreCase))
.OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
.CopyToDataTable();
或(查询语法相同):
var rows = from row in employees.AsEnumerable()
let value = row.Field<string>("ColumnName")
where value.StartsWith("A", StringComparison.CurrentCultureIgnoreCase)) // for example
orderby value.FirstOrDefault()
select row;
employees = rows.CopyToDataTable();
然而,现在orderby
是毫无意义的,因为您希望按第一个字母排序记录,这些记录都以同一个字母开头。
这里是我以前使用的一个旧的DataTable选择和排序包装器。现在我正在使用另一个类,它可以将数据表转换为自定义对象,并且可以轻松地使用linq。
public static class CTableManager
{
public static DataTable Select(DataTable dt, string sFilter)
{
DataTable dtResult = dt.Clone();
try
{
dtResult = dt.Select(sFilter).CopyToDataTable();
}
catch { }
return dtResult;
}
public static DataTable Sort(DataTable dt, string sOrder)
{
DataTable dtResult = dt.Clone();
try
{
dt.DefaultView.Sort = sOrder;
dtResult = dt.DefaultView.ToTable().Copy();
}
catch { }
return dtResult;
}
public static DataTable SelectAndSort(DataTable dt, string sFilter, string sOrder)
{
DataTable dtResult = dt.Copy();
if (sFilter != string.Empty)
{
dtResult = Select(dtResult, sFilter);
}
if (sOrder != string.Empty)
{
dtResult = Sort(dtResult, sOrder);
}
return dtResult;
}
}
用法:
SQL 中的正常where过滤器
var myResult = CTableManager.Select(dtSource,"itemDesc like '%plastic%' AND Price > 25.97");
类似的再次排序SQL
var myResult = CTableManager.Sort(dtSource,"Price DESC, Quantity ASC");
显然两种
var myResult = CTableManager.SelectAndSort(dtSource,"itemDesc like '%plastic%' AND Price > 25.97", "Price DESC, Quantity ASC");