2011-05-14 164 views
0

我有一个充满订单信息的数据集,我试图用DataView过滤数据集。C# - 使用DataView进行过滤

这是我到目前为止。这将返回DataSet中的所有列。

DataTable orders = dataSet.Tables[0]; 

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable() 
            where order.Field<Int16>("OrderID") = 2 
            select order; 

DataView view = query.AsDataView(); 

我想要做的是该查询只返回一些列而不是所有的列。我该怎么办?

回答

4

使用匿名类型的查询:

DataTable orders = dataSet.Tables[0]; 

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable() 
            where order.Field<Int16>("OrderID") = 2 
            select new { Property1, Property2 }; 

DataView view = query.AsDataView(); 
+3

你需要'新{Property1 = order.Field (“订单ID”),.. }' – 2011-05-14 14:59:24

+0

你说得对,我的代码不完整 – 2011-05-15 08:32:29

0

也许你应该考虑实际使用DataView本身的能力,而不是使用迂回排序的LINQ解决方案:

var filter = new DataView(orders); 
filter.RowFilter = "OrderID = 2"; 
var resultTable = filter.ToTable(false, "Column1", "Column2", "Column3"); 

ToTable()方法允许你指定一个任意的列列表来创建一个新表。当然,你还可以换的结果表中另一数据视图,如果你需要返回的是不是表:

var resultView = new DataView(resultTable);