Dot-Net

沉迷於 LINQ

  • September 11, 2021

好吧,我越用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();

**我的問題是這是否是一件好事,或者是否對 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)

引用自:https://stackoverflow.com/questions/262110