沉迷于LINQ

Rob*_*Rob 10 .net linq

好吧,我使用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)


Jon*_*eet 5

对我来说似乎很好 - 虽然我尝试使用强类型数据集,这使得LINQ查询看起来更加愉快.

但是,LINQ是一件非常好的事情 - 与进程外LINQ提供程序相比,LINQ to Objects(以及XML和DataSet的周围技术)非常可预测.(它不像LINQ to SQL 那样性感,但更广泛适用于IMO.)