选择列表时提高性能

时间:2012-11-29 14:12:33

标签: c# performance linq

我的方法如下:

public static IList<MedicalRecord> UpdateServicePrice(
                         IList<MedicalRecord> mListMedicalRecord, 
                         IList<ServicePrice> listAllServicePrice)
{
    foreach (MedicalRecord medical in mListMedicalRecord)
    {
        medical.mListServicePrice =
            (from p in listAllServicePrice
             where p.MedicalRecordID == medical.MedicalRecordID
            select p).ToList();
    }
    return mListMedicalRecord;
}

但运行速度非常慢。 任何人都可以帮助我改善上述方法的表现吗? 非常感谢。

2 个答案:

答案 0 :(得分:3)

这是一个基于Join的方法,它应该实现同样的目标,但速度更快:

public static IList<MedicalRecord> UpdateServicePrice(
    IList<MedicalRecord> mListMedicalRecord,
    IList<ServicePrice> listAllServicePrice)
{
    foreach (var j in mListMedicalRecord.GroupJoin(listAllServicePrice,
        mr => mr.MedicalRecordID,
        sp => sp.MedicalRecordID,
        (mr, sps) => new { Record = mr, Prices = sps }))
    {
        j.Record.mListServicePrice = j.Prices.ToList();
    }
    return mListMedicalRecord;
}

您的代码会为每个ServicesPrices循环一次MedicalRecord。加入会查看价格一次,按记录ID对它们进行分组,然后将它们连接到正确的记录。

答案 1 :(得分:0)

通过将'where'替换为'join'子句,您可能会获得显着的改进。