【发布时间】:2009-04-18 23:10:29
【问题描述】:
我正在使用带有管道/过滤器的 Linq2Sql。我的数据库由 Accounts 和 Transactions 表组成,其中每个 Transaction 行都链接到一个 Account。
显示帐户时,我想显示该帐户及其所有交易。很简单。现在我正在尝试限制 /accounts/4/{year}/{month}/{day} 显示的交易。
帐户 a = AccountsRepository.GetAccounts() .WithID(id) .FilterTransactions(年、月、日) .SingleOrDefault();那么我怎样才能编写一个过滤器来返回账户,同时过滤返回的交易呢?
当我在没有 FilterTransactions 的情况下运行分析器时,我会收到 2 个 sql 调用...
exec sp_executesql N'SELECT [t0].[ID], [t0].[BankName], [t0].[BankCode], [t0].[CardNumber], [t0].[Locale] FROM [dbo].[帐户] AS [t0] WHERE [t0].[ID] = @p0',N'@p0 int',@p0=1 exec sp_executesql N'SELECT [t0].[ID], [t0].[AccountID], [t0].[日期], [t0].[描述], [t0].[金额] FROM [dbo].[交易] AS [t0] WHERE [t0].[AccountID] = @p0',N'@p0 int',@p0=1我的想法是,在过滤器中执行类似(当年的简单示例)
公共静态 IQueryable但是,a.Transactions 是一个 EntitySet,而 Where 返回一个 IEnumerable。
另一种解决方案是将帐户返回到我的视图,然后在视图中调用 HtmlHelper,该 HtmlHelper 调用另一个操作来显示事务。但是,这会导致 1 个额外的 sql 调用,并且还会导致我在显示所需信息时出现问题。
【问题讨论】:
标签: asp.net-mvc linq linq-to-sql