我有這些疑問:爲什麼Double GroupBy + ToList耗時過長?
var Data = (from ftr in db.TB_FTR
join mst in db.TB_MST on ftr.MST_ID equals mst.MST_ID
join trf in db.TB_TRF on mst.TRF_ID equals trf.ID
select new CityCountyType { City = ftr.CITY, County = ftr.COUNTY, Type = trf.TYPE }
).OrderBy(i => i.City).ThenBy(i => i.County);
var Data2 =
Data.GroupBy(i => new {i.City, i.County, i.Type})
.Select(group => new {Name = group.Key, Count = group.Count()})
.OrderBy(x => x.Name)
.ThenByDescending(x => x.Count)
.GroupBy(g => new {g.Name.City, g.Name.County})
.Select(g => g.Select(g2 =>
new {Name = new {g.Key.City, g.Key.County, g2.Name.Type}, g2.Count})).ToList();
我試圖讓對象,它們的縣市是相同的列表清單。但是第二個查詢花費太長時間才能得出結果。我等了大約30分鐘,但沒有回答,但是名單Data
有大約5000條記錄。如何更改這些查詢以便我可以獲取我想要的列表清單?提前致謝。
例如該查詢返回這樣一個列表:
{ Name = {{ City = New York City, County = Bronx, Type = Type A }}, Count = 4 }
{ Name = {{ City = New York City, County = Bronx, Type = Type B }}, Count = 8 }
{ Name = {{ City = New York City, County = Bronx, Type = Type C }}, Count = 24 }
{ Name = {{ City = New York City, County = Manhattan, Type = Type B }}, Count = 43 }
{ Name = {{ City = New York City, County = Manhattan, Type = Type C }}, Count = 58 }
{ Name = {{ City = Seattle, County = King County, Type = Type D }}, Count = 43 }
{ Name = {{ City = Seattle, County = King County, Type = Type A }}, Count = 67 }
{ Name = {{ City = Seattle, County = Snohomish County, Type = Type C }}, Count = 67 }
我想使這個名單幾個列表如下:
表1:
{ Name = {{ City = New York City, County = Bronx, Type = Type A }}, Count = 4 }
{ Name = {{ City = New York City, County = Bronx, Type = Type B }}, Count = 8 }
{ Name = {{ City = New York City, County = Bronx, Type = Type C }}, Count = 24 }
表2:
{ Name = {{ City = New York City, County = Manhattan, Type = Type B }}, Count = 43 }
{ Name = {{ City = New York City, County = Manhattan, Type = Type C }}, Count = 58 }
列表3:
{ Name = {{ City = Seattle, County = King County, Type = Type D }}, Count = 43 }
{ Name = {{ City = Seattle, County = King County, Type = Type A }}, Count = 67 }
表4:
{ Name = {{ City = Seattle, County = Snohomish County, Type = Type C }}, Count = 67 }
不能使用Data.Where(a => a.City.ToString()== a.County.ToString())。select(a); – Biswabid
@Biswabid不,我認爲我不能很好地解釋自己。請參閱我的編輯。 – jason
這就是爲什麼我不喜歡linq。如果你不明白它是如何工作的,那可能會很糟糕。您調用的每種方法都會通過IEnumerable返回另一個IEnumerable。所以這些鏈接的電話都堆疊起來,你可能會做十個,十五個循環。如果你使用自己的代碼而不是linq來重寫單一函數,你會看到性能提高 – peteisace