已標記爲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