Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 慢速连接查询-实体框架_C#_Performance_Entity Framework_Join - Fatal编程技术网

C# 慢速连接查询-实体框架

C# 慢速连接查询-实体框架,c#,performance,entity-framework,join,C#,Performance,Entity Framework,Join,我试图在实体框架中执行一个简单的查询 我有一张时髦的清单 List<FunkyThing> funkyThings; 我正在尝试连接到数据库中的funky things表 该表的内容大致如下: FunkyThingsTable int ID string UniqueCustomerCode string colour string usefulInfoOfGreatValue decimal cost 现在碰巧这张桌子上有大约300000件古怪的东西 我希望做的是将我的列表加

我试图在实体框架中执行一个简单的查询

我有一张时髦的清单

List<FunkyThing> funkyThings;
我正在尝试连接到数据库中的funky things表

该表的内容大致如下:

FunkyThingsTable

int ID
string UniqueCustomerCode 
string colour
string usefulInfoOfGreatValue
decimal cost
现在碰巧这张桌子上有大约300000件古怪的东西

我希望做的是将我的列表加入到我的表中,以获得greatvalue元素的有用信息。详情如下:

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秒钟的时间运行。我做错了什么

一些简短的注释。我使用的工作单元模式如下所述:

由于长期的技术原因,客户没有整数ID,只有一个字符串客户代码-因此进行了比较

补充说明: 根据工作单元文章,unitOfWork.FunkyThingsRepository.Get()返回IEnumerable:

 public virtual IEnumerable<TEntity> Get

然而遗憾的是,这需要相同的时间

您的查询将导致所有300000行从数据库检索到内存并在那里执行联接。查看您的查询,您所要做的就是根据
UniqueCustomerCode
提取与
funkyThings
中的项目关联的
UsefulInfoOfGreatValue

在本文中,
Get()
方法有一个默认为null的过滤器参数。您可以设置此筛选器以使查询更快(即仅获取所需的行)

试试这个

var funkyThingsCustomerCodes=funkyThings.Select(x=>x.FunkyThingUniqueCustomerCode.ToList();
var ListofUnknythingUsefulInfoQuery=
来自unitOfWork.FunkyThingsRepository.Get(e=>funkyThingsCustomerCodes.Contains(e.UniqueCustomerCode))中的funkyThing
选择新的{
UniqueCode=funkyThing.UniqueCustomerCode,
UsefulInfoOfGreatValue=funkyThing.UsefulInfoOfGreatValue
};

此外,如果在表中的
UniqueCustomerCode
列上创建索引,上述查询将更快。

尝试使用即时加载,并使用include语句。会快一点。请浏览以下链接,它可能会对您有所帮助


我怀疑每一行都做了
unitOfWork.FunkyThingsRepository.Get()
可能是原因。这是做什么的?它返回一个IEnumerable tenty,如文章所述:@ChrisNevill删除上述注释,并将其添加到您的问题中comment已删除并附加到article@ChrisNevill-我的意思是它是如何工作的>它对数据库进行昂贵的调用吗?它是否尝试连接到远程服务器?诸如此类的事情。这对这个特殊的问题有效-谢谢阿拉。我唯一关心的是,在项目的其他地方,我需要一个内部连接。在我看来,目前使用这个工作单元解决方案,我不知道如何才能做到这一点。
 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}) ;