2014-10-02 35 views
0

我最近学习了一些LINQ源代码,并决定在我正在开发的项目中使用它。除了一件事外,一切都几乎清晰可辨。使用LINQ to SQL进行复杂查询

我正在制作复杂的报表,由几个表组成。之前我使用存储过程来达到这个目的。我形成了临时表中存储的几个临时数据块,然后使用一系列2表连接将它们连接在一起。

问题是: LINQ不允许创建临时表。我知道在LINQ中以“级联”的方式构建了复杂的查询,但是如果我这样做,

问题是:我最终会在DataContext.Log中收到什么?我认为这将是一个非常庞大的查询,无法理解并用于调试。我对吗?如果我是,如何找到解决方法? DataLoadOptions和LoadWith不会这样做,因为我一次处理所有数据,使用它将导致查询雪崩。

在此先感谢

+0

你看过前例吗? [Dapper](https://github.com/StackExchange/dapper-dot-net),那么也许你可以将直接的SQL与LINQ结合起来? – Tomasito 2014-10-02 13:20:36

+0

我不想以任何方式处理SQL。这就是为什么我使用LINQ – Summit2 2014-10-03 09:29:42

回答

0

LINQ明确允许使用临时表的创建,它只是实现的IQueryable(名单是一个很好的例子)的任何数据类型,因此,如果你需要一个临时表,你只要做到这一点...

var tempTable1 = [LINQ Query goes here].ToList() 

和瞧,你有一个临时表。如果你不喜欢泛型变量,那么你可以创建类并使用List<tableClass>而不是泛型。

从这一点,您可以使用新的Var作为某些东西在运行LINQ查询时进行选择。如果您需要更长的时间,可以将它存储在Session中或传递变量。

+1

我在谈论SQL临时表。我假设将临时结果放入内存中,然后在程序中进一步处理它们要比在SQL过程中用SQL临时表执行同样的事情要慢得多。要点是在存储过程中,我可以看到每个单独的查询,并且我假设在Log中我不会有这种可能性。 – Summit2 2014-10-03 09:35:18

+0

是的,不幸的是,LINQ不支持SQL端临时表。如果你的临时表非常大,那么当你开始填充本地内存时你会看到性能下降......但是对于一个较小的表,能够避免与DB服务器交谈导致的网络滞后可以弥补针对C#对象的LINQ查询性能略有下降。如果你肯定仍然需要临时表,不幸的唯一方法就是将LINQ转换为临时表:http://weblogs.asp.net/scottgu/linq-to-sql-part-6-retrieving-data-using-stored -procedures – guildsbounty 2014-10-03 12:43:08