我正在使用Linq2Sql管道/過濾器。我的數據庫由帳戶和交易表組成,其中每個交易行都鏈接到一個帳戶。內部列表對象上的Linq2Sql管道和過濾器
顯示帳戶時,我想顯示帳戶的所有交易。夠簡單。現在我試圖限制以/ accounts/4/{year}/{month}/{day}爲例的交易。
Account a = AccountsRepository.GetAccounts() .WithID(id) .FilterTransactions(year, month, day) .SingleOrDefault();
那麼,我該如何編寫一個過濾器來返回帳戶,但也過濾返回的交易?
當我運行沒有FilterTransactions探查我得到2 SQL調用...
exec sp_executesql N'SELECT [t0].[ID], [t0].[BankName], [t0].[BankCode], [t0].[CardNumber], [t0].[Locale] FROM [dbo].[Accounts] AS [t0] WHERE [t0].[ID] = @p0',N'@p0 int',@p0=1 exec sp_executesql N'SELECT [t0].[ID], [t0].[AccountID], [t0].[Date], [t0].[Description], [t0].[Amount] FROM [dbo].[Transactions] AS [t0] WHERE [t0].[AccountID] = @p0',N'@p0 int',@p0=1
我的想法是,在過濾器中做類似的信息(年度簡單的例子)
public static IQueryable<Account> FilterTransactions( this IQueryable<Account> qry, int? year, int? month, int? day) { ...loop through each Account a.Transactions = a.Transactions .Where(t => t.Date.Year == year); }
但是,a.Transactions是一個EntitySet,Where返回一個IEnumerable。
另一種解決方案是將帳戶返回到我的視圖,然後在視圖中調用HtmlHelper,該HtmlHelper調用另一個操作來顯示事務。但是,這將導致1額外的SQL調用,並導致我顯示我需要的信息的問題。