[英]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.