2011-06-17 42 views
1

私はいくつかのテーブルを結合するLINQ To Entitiesを持っています。ここで私が使用するLINQがあります。linq to非常に遅い

var lastestEntry = (from c in etDataContext.Child_HomeVisitor 
           join s in etDataContext.ServiceCoordinators 
           on c.HomeVisitorID equals s.ServiceCoordinatorID 
           join ch in etDataContext.CountyHomeVisitorAgencies 
           on c.CountyHomeVisitorAgencyId equals ch.CountyHomeVisitorAgencyID 
           join a in etDataContext.Agencies 
           on ch.AgencyID equals a.AgencyID 
           join f in etDataContext.ServiceCoordinatorFundingSourceTypes 
           on c.PrimaryFundingSourceID equals f.ServiceCoordinatorFundingSourceTypeId 
           into joinFundingSource 
           from j in joinFundingSource.DefaultIfEmpty() 
           where c.ChildID.Equals(childID) 
           orderby c.EffectiveStartDate descending, c.CreatedDateTime descending 
           select new 
              {                       
               c.EffectiveStartDate,             
               s.FirstName, 
               s.LastName, 
               a.Description, 
               j.FundingSource 
              }).FirstOrDefault(); 

LINQPADで約20秒実行されますが、生成されたSQL文を実行すると1秒になります。私はLINQ文からこのSQL文を生成するのにほとんどの時間が費やされていると思いますが、なぜそれが長くかかるのでしょうか?

答えて

1

EFは、最初のクエリを実行している間にメタデータを読み込みます。これは、平均数のテーブルでも時間がかかることがあります。 2回目の実行が速くなったかどうかを確認しましたか(LInqpadではなくコードで実行されていますか?)

EFを学ぶ: http://www.testmaster.ch/EntityFramework.test