我有一个高速应用程序,使用一个自定义类(Price、Quantity、DateTime)作为List的元素。如果Price没有找到,我会将其添加到List中,否则使用Order Qty和DateTime更新它,然后在List上运行查询以提取按Order Quantity排序的前4个出现次数。代码在半小时内表现良好,但在处理数千条记录后变得缓慢。考虑尝试使用字典,因为它具有索引功能,但无法理解如何更新和使用Linq语句。
以下是需要回答的问题:
以下是需要回答的问题:
- 是否可以直接使用自定义类或结构体在字典中进行Linq操作,提取前4个出现次数?如果可以,提供一个简短的示例。
- 如果从TryGetValue执行后,可以直接更新字典字段中的值吗?如果可以,提供一个简短的示例。
- ...还是说不应该使用字典,记住速度至关重要?
List<PriceLevel> TrackPrice = new List<PriceLevel>();
decimal loopLast=0;//sample only
int loopLastQuantity=0;//sample only
DateTime inputDateDT=DateTime.Now;//sample
// Add or Update List
var foundit = TrackPrice.FirstOrDefault(x => x.ProgramPrice == loopLast);
if (foundit != null)// Found existing record
{
foundit.ProgramQuantity += loopLastQuantity;
foundit.ProgramLastTime = inputDateDT;
}
else // Add a new record
{
TrackPrice.Add(new PriceLevel
{
ProgramPrice = loopLast,
ProgramQuantity = loopLastQuantity,
ProgramLastTime = inputDateDT,
});
}
}
// Query the List
var finalFourQuantities = (from a in TrackPrice
orderby a.ProgramQuantity descending
where a.ProgramQuantity > 300000
select new
{
a.ProgramPrice,
a.ProgramQuantity,
a.ProgramLastTime,
}).Take(4);
foreach (var myprice in finalFourQuantities)
{
//Process 4 order prices
}
public class PriceLevel
{
public decimal ProgramPrice { get; set; }
public int ProgramQuantity { get; set; }
public DateTime ProgramLastTime { get; set; }// Last Order Time
}