好吧,我使用LINQ越多,我就越喜欢它!我最近发现自己正在处理一些遗留代码.它是您经典的DataSet和DataTable丰富的应用程序.好吧,当添加一些功能时,我发现自己真的只想查询DataTable的行以获得我正在寻找的结果.
让我再说一遍......我只想问Rows集合我需要的东西,而不是循环并添加到临时集合中.没有循环,没有临时变量,只需给我我想要的东西.
var customerOrderIds = table.Rows.Cast<DataRow>()
.Where(x => (string)x["CUSTOMER_ID"] == customerId)
.Select(x => (string)x["CUSTOMER_ORDER_ID"])
.Distinct();
Run Code Online (Sandbox Code Playgroud)
我的问题是这是否是一件好事,或者是否被LINQ带走了?在我看来,这种从集合中提取数据子集的声明式风格是一件好事,最终更具可读性.但话说回来,也许我只是被打败了:)
Mar*_*ell 12
另一个观察; 如果您不使用类型化数据集,您可能还想了解Field<>扩展方法:
var customerOrderIds = table.Rows.Cast<DataRow>()
.Where(x => x.Field<string>("CUSTOMER_ID") == customerId)
.Select(x => x.Field<string>("CUSTOMER_ORDER_ID"))
.Distinct();
Run Code Online (Sandbox Code Playgroud)
或者使用查询语法:
var customerOrderIds = (
from row in table.Rows.Cast<DataRow>()
where row.Field<string>("CUSTOMER_ID") == customerId
select row.Field<string>("CUSTOMER_ORDER_ID")
).Distinct();
Run Code Online (Sandbox Code Playgroud)
我不是说它更好或更糟 - 只是另一种可行的选择.
(其实,我不太用DataTable,所以YMMV)
对我来说似乎很好 - 虽然我尝试使用强类型数据集,这使得LINQ查询看起来更加愉快.
但是,LINQ是一件非常好的事情 - 与进程外LINQ提供程序相比,LINQ to Objects(以及XML和DataSet的周围技术)非常可预测.(它不像LINQ to SQL 那样性感,但更广泛适用于IMO.)