Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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# 每次我需要第一个查询时,就使用它——如果性能不可接受,我只需要手动编写自己的t-SQL,并使用常用的ADO.NET对象。我打算把这个问题再开放一天,看看是否还有其他想法,如果没有,我会把你的答案标记为接受答案。再次感谢您对我的问题感兴趣@HydroPowe_C#_Entity Framework_C# 4.0_Entity Framework 4_Entity Framework 4.1 - Fatal编程技术网

C# 每次我需要第一个查询时,就使用它——如果性能不可接受,我只需要手动编写自己的t-SQL,并使用常用的ADO.NET对象。我打算把这个问题再开放一天,看看是否还有其他想法,如果没有,我会把你的答案标记为接受答案。再次感谢您对我的问题感兴趣@HydroPowe

C# 每次我需要第一个查询时,就使用它——如果性能不可接受,我只需要手动编写自己的t-SQL,并使用常用的ADO.NET对象。我打算把这个问题再开放一天,看看是否还有其他想法,如果没有,我会把你的答案标记为接受答案。再次感谢您对我的问题感兴趣@HydroPowe,c#,entity-framework,c#-4.0,entity-framework-4,entity-framework-4.1,C#,Entity Framework,C# 4.0,Entity Framework 4,Entity Framework 4.1,每次我需要第一个查询时,就使用它——如果性能不可接受,我只需要手动编写自己的t-SQL,并使用常用的ADO.NET对象。我打算把这个问题再开放一天,看看是否还有其他想法,如果没有,我会把你的答案标记为接受答案。再次感谢您对我的问题感兴趣@HydroPowerDeveloper如果查询中有很多连接、分组或聚合函数,那么创建索引视图可能会带来好运。不幸的是,视图没有多大帮助。查询是动态的(在运行时确定),并且基于用户输入……我不知道将使用哪些表,它们将如何连接,或者将指定何种过滤条件。我认为你关于通


每次我需要第一个查询时,就使用它——如果性能不可接受,我只需要手动编写自己的t-SQL,并使用常用的ADO.NET对象。我打算把这个问题再开放一天,看看是否还有其他想法,如果没有,我会把你的答案标记为接受答案。再次感谢您对我的问题感兴趣@HydroPowerDeveloper如果查询中有很多连接、分组或聚合函数,那么创建索引视图可能会带来好运。不幸的是,视图没有多大帮助。查询是动态的(在运行时确定),并且基于用户输入……我不知道将使用哪些表,它们将如何连接,或者将指定何种过滤条件。我认为你关于通过调整索引来优化查询执行的建议是我能做的最好的了。我正在研究一些其他的想法(见Sgmore和Anas Karkoukli的评论),但我不确定它们是否有效。谢谢你的建议,辅导员!但是,我无法在SQL Server上创建静态视图,因为第一个查询是动态的(该查询是由应用不同筛选条件的用户创建的)。此外,从一个角度来看,每次查询它时,它背后的T-SQL都会运行……这是我想要避免的事情之一,因为它需要很长时间才能运行。如果要将查询直接保留在服务器上,您需要避免将初始IQueryable转换为IEnumerable(通过ToList/ToArray/AsEnumerable/etc)。EF应该在连接的表达式树上正确组合查询。在IEnumerable上使用Contains传递的参数不能超过2000个。为什么query1IDs不可用?嗨,吉姆,谢谢你的评论。请参考我原始问题中的编辑1,以了解更多关于我试图做什么的说明。问题不在于将查询保留在服务器上(出于您给出的原因,我当然希望这样做)…问题在于我不想继续执行query1,因为它非常慢。可能会使用具有Linq to实体的临时表。我已经在Linq2Sql中做了这项工作,但是我对LinqTo实体的了解还不够,无法确定是否可以做类似的事情。有关更多详细信息,请参阅我对这个问题的回答。你好,斯格摩尔!对这是我想用LINQ2实体做的事情……但是,我不确定这是否可行。我将进一步调查这一点。如果有可能在实体框架中实现,我认为实现会稍微复杂一些。听起来我必须动态编辑*.edmx文件——这可能是不可能的。有人对如何在LINQ2实体中实现sgmoore的想法有什么想法吗?@sgmoore选项的缺点是它在高度并发的环境中不起作用。它还需要数据库中的管理员(创建表/删除表)权限,这通常是一个安全漏洞。对于L2S,我建议使用一个返回IMultipleResults的存储过程,但EF还不支持这些。在这种情况下,针对返回多个结果并使用内部临时表的存储过程删除本机ADO可能是此操作的最佳选择。将EF用于其他90%的应用程序。谢谢你的建议和链接,尽管我不确定这是否对我有帮助。正如我在编辑中提到的,问题在于query1的多次执行……据我所知,如果我使用“装饰器模式”方法,query1仍将多次执行。我的理解正确吗?非常欢迎。在您的情况下,如果使用查询包装器,query1将是某种类型的子查询,连接到query2…N中,因此它将在SQL连接上下文中与其他查询一起执行,而不是作为单独的查询执行多次,我猜这就是您试图使用query1返回的ID作为其他ID的过滤机制所做的。我真的希望你能尽快找到一个令人满意的解决办法。。祝你好运。阿纳斯……这是一个非常有趣的想法。我读过更多关于“装饰者模式”的书,如果我说我完全理解它,那我就是在撒谎。然而,从我所读到的来看,这似乎是有希望的。我一开始工作就要做一些实验。我会让你知道我是否成功。如果这确实有效,那么我认为这是每个EF程序员都应该知道的。再次感谢你的建议!阿纳斯……也许我没有正确理解“装饰器模式”,但它似乎用于“链接”操作。我看不出这对我有什么帮助。我没有将查询2链接到N…它们彼此完全独立…它们只是碰巧共享同一个“过滤表”(即查询1)。我承认我不完全理解“装饰者模式”,因此任何启示都将不胜感激
var tableNameById = DbContext.TableName.ToDictionary(x => x.ID);
var query1Lookup = new Hashset<int>(query1IDs);
var query2 = DbContext.TableName.ToList().Where(x => query1IDs.Contains(x.ID));