namespace YLErp.Modules.TradeModule.QueryModule { public sealed class TradeConfirmationDocumentQueryItem { public trade_contract_document Document { get; set; } public trade_contract_r Relation { get; set; } } public static class TradeConfirmationDocumentQuery { public static IQueryable Create( IQueryable documents, IQueryable relations, IQueryable trades, DateTime? tradeDateStart, DateTime? tradeDateEnd) { if (tradeDateStart.HasValue) { trades = trades.Where(t => t.TradeDate >= tradeDateStart.Value); } if (tradeDateEnd.HasValue) { var tradeDateEndExclusive = tradeDateEnd.Value.Date.AddDays(1); trades = trades.Where(t => t.TradeDate < tradeDateEndExclusive); } return from document in documents join relation in relations.Where(r => r.IsValid) on document.Code equals relation.ContractCode join trade in trades on relation.TradeId equals trade.id select new TradeConfirmationDocumentQueryItem { Document = document, Relation = relation }; } } }