已标记为Linq但您使用的是DataTable.Select
,这是一种老方法来过滤DataTable
。使用Enumerable.Where
和强类型Field
扩展方法。
decimal priceFrom = decimal.Parse(HiddenField1.Value);
decimal priceTo = decimal.Parse(HiddenField2.Value);
var dtFiltered = dtt.AsEnumerable()
.Where(row => row.Field<decimal>("Price") >= priceFrom
&& row.Field<decimal>("Price") <= priceTo))
.CopyToDataTable();
假定该列的类型是decimal
,如果您需要使用在Field
或先转换它不同的类型。
请注意,您需要添加System.Linq
(文件)和对System.Data.DataSetExtensions
(项目)的引用。
更新
,但它表示在数据表
CopyToDataTable
都没有找到价值观错误,如果输入序列为空,抛出一个异常。在我看来,最好的办法是分别处理这种情况:
DataTable tblFiltered = dtt.Clone(); // clones only structure not data
var filteredRows = dtt.AsEnumerable()
.Where(row => row.Field<decimal>("Price") >= priceFrom
&& row.Field<decimal>("Price") <= priceTo));
if(filteredRows.Any())
{
tblFiltered = filteredRows.CopyToDataTable();
}
你得到什么错误?看起来像'CopyToDataTable()'扩展方法应该返回一个空的'DataTable',即使结果是空的而不是错误的。 – Ocelot20