0

この linq クエリは、小さなデータベースでも数時間かかるのだろうか サブクエリを含む古いバージョンがありますが、例外がスローされます。

var a = (
    from item1 in fullMappingData
    from item2 in dc.EntityMasters
    from item3 in dc.Entities
    from item4 in dc.Contributors

    where (
        item1.Name
             .Replace(" ", "")
             .Replace(",", "")
             .Trim()
            == item2.CBEntityName
                    .Replace(" ", "")
                    .Replace(",", "")
                    .Trim()
            &&
        item1.ContributedName
             .Replace(" ", "")
             .Replace(",", "")
             .Trim()
            == item3.EntityName
                    .Replace(" ", "")
                    .Replace(",", "")
                    .Trim()
            &&
        item1.ContributorName
             .Replace(" ", "")
             .Replace(",", "")
             .Trim()
            == item4.ContributorName
                    .Replace(" ", "")
                    .Replace(",", "")
                    .Trim()
    )
    select new Mapping
    {
        ContributedID =item3.ContributedID, // (from x in dc.Entities
                                            //where x.EntityName.Replace(" ", "").Replace(".", "").Replace(",", "").Trim() == item1.ContributedName.Replace(" ", "").Replace(",", "").Trim()
                                            //select x.ContributedID).First(),

        ContributorID = item4.ContributorID,//(from x in dc.Contributors
                                            //where x.ContributorName.Replace(" ", "").Replace(".", "").Replace(",", "").Trim() == contributor.Replace(" ", "").Replace(",", "").Trim()
                                            //select x.ContributorID).First(),

        NameID = item2.NameID   //(from x in dc.EntityMasters
                                // where x.EntityName.Replace(" ", "").Replace(".", "").Replace(",", "").Trim() == item1.Name.Replace(" ", "").Replace(",", "").Trim()
                                //select x.NameID).First()
    }
);

ありがとう!

4

3 に答える 3

3

joinの代わりに使用してみてくださいwhere

于 2013-10-16T13:08:49.670 に答える
0

Linq は素晴らしいですが、パフォーマンスが必要な場合は、それ以上のことを行う必要があります。クエリを細かく分割し、Hashets/Discitonaries を使用する必要があると思います。

where または join を使用すると、線形検索を使用してマッチングが実行されるため、パフォーマンスが低下するという事実に直面する必要があります。

特に、条件を変更して多くの条件を変更するとReplace、良いパフォーマンスは期待できません。

私の観点からはReplace、結合条件に参加するキーを辞書に挿入する必要があります-それらをフィルター処理した後-その後、TryGet、ContainsKey、または線形のものではなく、他のハッシュベースのルックアップを使用してそれらをルックアップします。

もちろん、この手順ではメモリ要件が悪化することに注意する必要があります。

于 2013-10-16T13:10:18.883 に答える