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

コードは、ServicesPricesfor each を一度ループしますMedicalRecord。Join は価格を 1 回調べて、レコード ID でグループ化し、正しいレコードに結合します。

于 2012-11-29T14:27:35.707 に答える
0

「where」を「join」句に置き換えると、大幅な改善が得られる場合があります。

于 2012-11-29T14:16:13.410 に答える