[英]Custom select DataTable Columns in C#
我想选择以C#中给定字母开头的DataTable
列。 我必须使用Sort Property
来做到这一点。 我只发现了如何对它们进行升序或降序排序。
sort的结果应该等效于带有LIKE 'l%'
的sql select语句, l
作为参数给出。 我可以使用Substring提取第一个字母,但我该如何使用它? 谢谢。
DataView dv= employees.DefaultView;
dv.Sort="ColumnName asc";
employees = dv.ToTable();
PS:还发现了RowFilter
属性,但我需要使用'Sort'。
对不起第一次不太清楚。
您可以使用LINQ-To-DataTable :
employees = employees.AsEnumerable()
.OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
.CopyToDataTable();
请注意,您需要using System.Linq
文件顶部的using System.Linq
进行添加。
也许您发现查询语法更具可读性:
var rows = from row in employees.AsEnumerable()
let value = row.Field<string>("ColumnName")
orderby value.FirstOrDefault()
select row;
employees = rows.CopyToDataTable();
更新 : “排序后,我只需要选择以给定字母开头的那些”
然后你可能想要过滤记录,因此使用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中过滤器的正常位置
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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.