Entity Framework で簡単なクエリを実行しようとしています。
ファンキーなもののリストがあります
List<FunkyThing> funkyThings;
その中に 1 ~ 5 個の固有FunkyThing
の があります。
FunkyThing
{
string FunkyThingUniqueCustomerCode{get;set}
string UsefullInfoRegardFunkyThings{get;set}
}
データベースのファンキーなものテーブルに結合しようとしています。
表は次のように見えます。
FunkyThingsテーブル
int ID
string UniqueCustomerCode
string colour
string usefulInfoOfGreatValue
decimal cost
たまたま、このテーブルには約 300,000 のファンキーなものがあります。
私が望んでいたのは、リストをテーブルに結合して、有用なInfoOfGreatValue要素を取得することです。次のように:
var listOfFunkyThingsUsefulInfoQuery = from funkyThing in funkyThings
join
funkyThingDBEntity in unitOfWork.FunkyThingsRepository.Get()
on funkyThing.FunkyThingUniqueCustomerCode equals funkyThingDBEntity .UniqueCustomerCode
select new
{
uniqueCode= funkyThingDBEntity .UniqueCustomerCode,
usefulInfoOfGreatValue= funkyThingDBEntity .usefulInfoOfGreatValue
};
残念ながら、リストに項目が 1 つしかない場合でも、クエリの実行には約 5 秒かかります。私は何を間違っていますか?
いくつかの簡単なメモ。ここで説明されているように、作業単位パターンを使用しています: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of -work-patterns-in-asp-net-mvc-application
長い技術的な理由から、顧客は整数 ID を持っておらず、文字列の顧客コードのみを持っているため、この比較が行われます。
追記事項: 作業単位の記事によると、 unitOfWork.FunkyThingsRepository.Get() は IEnumerable を返します。
public virtual IEnumerable<TEntity> Get
私はちょうど再作業を試みたので、次のようにラムダを使用してください:
var listOfFunkyThingsUsefulInfoQuery = unitOfWork.FunkyThingsRepository.Get().Join (funkyThings, funkyThingDBEntity=>funkyThingDBEntity.UniqueCustomerCode, funkyThings=>funkyThings.FunkyThingUniqueCustomerCode ,(funkyThings,funkyThingDBEntity)=>new {uniqueCode= funkyThingDBEntity .UniqueCustomerCode, usefulInfoOfGreatValue=funkyThingDBEntity .usefulInfoOfGreatValue}) ;
しかし悲しいことに、これには同じ時間がかかります