2

我有如下方法:

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;
}

但它运行得很慢。任何人都可以帮助我提高上述方法的性能?非常感谢。

4

2 回答 2

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. Join 遍历价格一次,按记录 ID 对它们进行分组,然后将它们连接到正确的记录。

于 2012-11-29T14:27:35.707 回答
0

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

于 2012-11-29T14:16:13.410 回答