我正在尝试在实体框架中执行一个简单的查询。
我有一个时髦的东西清单
List<FunkyThing> funkyThings;
其中有 1-5 个 unique FunkyThing
。
FunkyThing
{
string FunkyThingUniqueCustomerCode{get;set}
string UsefullInfoRegardFunkyThings{get;set}
}
我正在尝试加入我数据库中的时髦事物表。
该表看起来类似于:
FunkyThingsTable
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
};
不幸的是,查询运行大约需要 5 秒——即使列表中只有一项。我究竟做错了什么?
一些快速的笔记。我正在使用此处描述的工作单元模式: http ://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of -work-patterns-in-an-asp-net-mvc-application
由于长期技术原因,客户没有整数 ID,只有字符串客户代码 - 因此进行了比较。
附加说明:根据工作单元文章 unitOfWork.FunkyThingsRepository.Get() 返回一个 IEnumerable:
public virtual IEnumerable<TEntity> Get
我刚刚尝试过重新工作,所以使用 lambda 如下:
var listOfFunkyThingsUsefulInfoQuery = unitOfWork.FunkyThingsRepository.Get().Join (funkyThings, funkyThingDBEntity=>funkyThingDBEntity.UniqueCustomerCode, funkyThings=>funkyThings.FunkyThingUniqueCustomerCode ,(funkyThings,funkyThingDBEntity)=>new {uniqueCode= funkyThingDBEntity .UniqueCustomerCode, usefulInfoOfGreatValue=funkyThingDBEntity .usefulInfoOfGreatValue}) ;
然而遗憾的是,这需要相同的时间