Linq to DataSet
几点基础:
1:单表查询
2:跨表连接
1: class DataTableExtensions
// DataTable to EnumerableRowCollection<DataRow>, while EnumerableRowCollection<TRow> has implemented
// Ienumerable<T>
public static EnumerableRowCollection<DataRow> AsEnumerable(this DataTable source);
// Ienumerable<T> to datatable
public static DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow;
public static void CopyToDataTable<T>(this IEnumerable<T> source, DataTable table, LoadOption options, FillErrorEventHandler errorHandler) where T : DataRow;
2: class DataRowExtensions
public static T Field<T>(this DataRow row, string columnName);
public static void SetField<T>(this DataRow row, string columnName, T value);
1:单表查询
1
var query = products.AsEnumerable().
2
Select(product => new
3
{
4
ProductName = product.Field<string>("Name"),
5
ProductNumber = product.Field<string>("ProductNumber"),
6
Price = product.Field<decimal>("ListPrice")
7
});
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
2:跨表连接
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
DataTable orders = ds.Tables["SalesOrderHeader"];
3
DataTable details = ds.Tables["SalesOrderDetail"];
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
var query =
6
from order in orders.AsEnumerable()
7
join detail in details.AsEnumerable()
8
on order.Field<int>("SalesOrderID") equals
9
detail.Field<int>("SalesOrderID")
10
where order.Field<bool>("OnlineOrderFlag") == true
11
&& order.Field<DateTime>("OrderDate").Month == 8
12
select new
13
{
14
SalesOrderID =
15
order.Field<int>("SalesOrderID"),
16
SalesOrderDetailID =
17
detail.Field<int>("SalesOrderDetailID"),
18
OrderDate =
19
order.Field<DateTime>("OrderDate"),
20
ProductID =
21
detail.Field<int>("ProductID")
22
};
23![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)