簡體   English   中英

如何使用 LINQ 在 C# 中處理子列表並獲取新的 object 列表?

[英]How do I handle child lists and get new object lists in C# using LINQ?

我有一個 LINQ 查詢,它為我提供了一個包含多個子列表的列表,所有子列表都具有雙值。

我想從中得到一個查詢結果。

如何獲得第一個、最后一個、最高和最低的雙精度值?

它應該是一個新的 object 並且新的返回值應該是一個列表嗎?

確實,手動編碼的版本會快一點,但除非您知道性能是您的應用程序的關鍵問題,否則我不會擔心這一點。 代碼的 LINQ 版本如下所示:

  IEnumerable<List<double>> queryResults = /*...*/

  var aggregates =
    from ds in queryResults
    select new {
      First = ds[0], Last = ds[ds.Count - 1],
      Lowest = ds.Min(), Highest = ds.Max() };

我認為這絕對更容易閱讀:-)。 如果嵌套的東西 ( ds ) 不是List類型,那么您將需要使用First()Last()擴展方法而不是直接索引。

請注意,如果您對性能感興趣,您還可以使用並行 LINQ,它在多個線程上運行查詢。 對於短名單,沒有真正的理由這樣做,但如果集合很大,它可能會給你更好的性能(比單線程手動編碼版本更好)。

你的問題相當不清楚。 但是,聽起來您有一系列從 LINQ 查詢返回的列表對象,並且您希望從所有這些子列表中的值中獲取一些聚合。 我從未在 LINQ 中看到過這樣做的方法,老實說,即使有方法,我也不認為性能可能會那么好。 您正在尋找的聚合非常簡單,可以通過循環手動計算。 像這樣的東西:

 double min = 200000000;
 double max = -200000000;
 double first = 0;
 double last = 0;
 bool hasFoundFirst = false;
 foreach ( List<double> childList in queryResults )
 {
      foreach ( double val in childList )
      {
           if ( !hasFoundFirst )
           {
                hasFoundFirst = true;
                first = val;
           }

           if ( val < min )
              min = val;
           if ( val > max )
              max = val;
           last = val;
      }
 }

這樣的事情會以一種非常有效的方式為您提供您正在尋找的結果。 這種事情,如果你能有效地編碼,往往會比 LINQ 更快。 LINQ 很棒,我用它做很多事情,但它只是眾多工具中的一種。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM