파이프/필터가있는 Linq2Sql을 사용하고 있습니다. 내 데이터베이스는 각 거래 행이 계정에 연결된 계정 및 거래 테이블로 구성됩니다.Linq2Sql 내부 목록 개체의 파이프 및 필터
계정을 표시 할 때 모든 거래와 함께 계정을 표시하고 싶습니다. 충분히 간단합니다. 이제 예를 들어/accounts/4/{year}/{month}/{day}에 표시된 거래를 제한하려고합니다.
Account a = AccountsRepository.GetAccounts() .WithID(id) .FilterTransactions(year, month, day) .SingleOrDefault();
계정을 반환하기위한 필터를 작성하고 반환 된 트랜잭션을 필터링하려면 어떻게해야합니까? 나는 FilterTransactions없이 프로파일 러를 실행하면
나는 필터 (연도의 간단한 예)
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); }
그런 짓을,
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
내 사고는 ... 2 SQL 호출 수 그러나 a.Transactions는 EntitySet이고 Where는 IEnumerable을 반환합니다.
또 다른 해결책은 계정을 내보기로 돌아간 다음보기 호출에서 트랜잭션을 표시하는 다른 작업을 호출하는 HtmlHelper입니다. 그러나,이 1 여분의 SQL 호출이 발생하고 나 또한 필요한 정보를 표시하는 데 문제가 발생했습니다.