.net - 沉迷于 LINQ

标签 .net linq

好吧,我越用 LINQ,就越喜欢它!我最近发现自己在工作中使用一些遗留代码。它是经典的数据集和数据表丰富应用程序。好吧,当添加一些功能时,我发现自己真的只想查询 DataTable 的行以获得我正在寻找的结果。

让我重复一遍...我只是想向 Rows 集合询问我需要的内容,而不是循环并添加到临时集合中。没有循环,没有临时变量,只给我我想要的。

var customerOrderIds = table.Rows.Cast<DataRow>()
   .Where(x => (string)x["CUSTOMER_ID"] == customerId)
   .Select(x => (string)x["CUSTOMER_ORDER_ID"])
   .Distinct();

我的问题是这是否是一件好事,还是我对 LINQ 着迷了? 在我看来,这种从集合中提取数据子集的声明式风格是一件好事,最终更具可读性。但话又说回来,也许我只是被迷住了:)

最佳答案

另一项观察;如果您不使用类型化数据集,您可能还想了解 Field<>扩展方法:

    var customerOrderIds = table.Rows.Cast<DataRow>()
       .Where(x => x.Field<string>("CUSTOMER_ID") == customerId)
       .Select(x => x.Field<string>("CUSTOMER_ORDER_ID"))
       .Distinct();

或者使用查询语法:

   var customerOrderIds = (
        from row in table.Rows.Cast<DataRow>()
        where row.Field<string>("CUSTOMER_ID") == customerId
        select row.Field<string>("CUSTOMER_ORDER_ID")
     ).Distinct();

我并不是说它更好或更坏 - 只是另一个可行的选择。

(其实我不太用DataTable,所以YMMV)

关于.net - 沉迷于 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/262110/

相关文章:

c# - WPF 绑定(bind)到全局变量以更新 UI

c# - 在 EF 4.3 的 LINQ 查询中使用 "let"关键字

c# - 如何在 LINQ 中的列上使用 DATEADD - LINQ 无法识别 DateAdd

linq - EF 返回聚合和非聚合数据

c# - 在 C# 中创建自定义常量后缀

c# - 等待和异步阻塞 UI

c# - .NET 与 MySql.Data 的兼容性

c# - 如何在类中包含 "Empty"常量

c# - 使用 LINQ 解析字符串中的数字

sql - 规范化或非规范化 : Store Contact Details (Phone Numbers) in separate Table? 搜索性能?