我有下面的代碼在LINQ的GroupBy選擇設置屬性:嘗試使用循環
public class Report
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Sales { get; set; }
}
var result = myItems.GroupBy(x => new { Id = x.Id, Name = x.Name }).Select(x => new Report { Id = x.Key.Id, Name = x.Key.Name });
foreach (var item in result)
{
item.Sales = anotherColletion.FirstOrDefault(x => x.Id == item.Id).Sales;
}
我不能銷售產權這種方式設置爲任意值。即使我嘗試:
foreach (var item in result)
{
item.Sales = 50;
}
不過,如果我使用下面的代碼它的工作原理設置屬性:
var result = myItems.GroupBy(x => new { Id = x.Id, Name = x.Name }).Select(x => new Report { Id = x.Key.Id, Name = x.Key.Name, Sales = 50 });
設計是這樣嗎?
如果我先執行myItems.ToList(),然後在沒有ToList()的情況下執行GroupBy(),那麼這樣做還是會導致查詢重新執行? – Thomas
@Thomas:這應該在技術上有效,因爲可變的Report報告對象已經在該階段創建並實現了。只有分組纔會重新執行,而不是創建對象。我強烈建議不要這樣做。 – Ani
我將實現myItems.ToList()的原因是因爲我想對集合執行多個GroupBy(未包括在此問題中),並使用這些集合進行計算。我的推理是運行一個數據庫查詢,然後在另一個GroupBy中使用內存集合。請問爲什麼你不推薦這樣做? – Thomas