В моей базе данных есть таблица счетов, которая содержит ежедневные начисления сумм, причитающихся с пользователей в зависимости от использования ими системы.Он также содержит записи полученных платежей.Например ...
BillingID UserID Type Date Description Amount
27298 228 D 11/10/2011 12:00:00 AM Protection Plan 0.2500
27299 228 D 11/10/2011 12:00:00 AM Storage Subscription Fee 1.6333
27300 250 D 11/10/2011 12:00:00 AM Storage Subscription Fee 7.9333
27301 253 D 11/10/2011 12:00:00 AM Storage Subscription Fee 7.9333
27302 254 D 11/10/2011 12:00:00 AM Storage Subscription Fee 1.6333
27303 255 D 11/10/2011 12:00:00 AM Storage Subscription Fee 1.6333
27304 257 D 11/10/2011 12:00:00 AM Storage Subscription Fee 3.3000
27305 262 D 11/10/2011 12:00:00 AM Storage Subscription Fee 0.0333
27306 265 D 11/10/2011 12:00:00 AM Storage Subscription Fee 0.9667
27307 266 D 11/10/2011 12:00:00 AM Storage Subscription Fee 0.9667
27308 228 D 11/10/2011 12:00:00 AM Subscription Overage 0.0832
27309 228 D 11/11/2011 12:00:00 AM Protection Plan 0.2500
27310 228 D 11/11/2011 12:00:00 AM Storage Subscription Fee 1.6333
27311 250 D 11/11/2011 12:00:00 AM Storage Subscription Fee 7.9333
27312 253 D 11/11/2011 12:00:00 AM Storage Subscription Fee 7.9333
Приведенные выше данные не являются реальными, но они отражают то, с чем я работаю.Моя цель - написать запрос Linq to Sql, в котором эти данные будут обобщены понятным для пользователя способом.Вот пример желаемого вывода:
User Month Type Description Amount
228 November D Protection Plan $10
228 November D Storage Subscription Fee $49
228 November D Subscription Overage $5
228 November C Payment ($54)
228 December D Protection Plan $10
...
Я смог выполнить часть того, что мне нужно, с помощью следующего кода:
BusinessLogic.cs Файл:
public static IEnumerable<Billing> GetBillingHistory(int userid, DateTime startDate, DateTime endDate)
{
SBMData2.SBMDataContext db = new SBMData2.SBMDataContext();
return from b in db.Billings
where b.UserID == userid && b.Date >= startDate && b.Date <= endDate
select
new Billing();
}
Код для страницы учетной записи пользователя:
protected void Page_Load(object sender, EventArgs e)
{
int userID = foo.Data.User.GetIDFromUserName(HttpContext.Current.User.Identity.Name);
DateTime endDate = DateTime.Now;
DateTime startDate = endDate.AddMonths(-3);
RadGrid2.DataSource = BusinessLogic.GetBillingHistory(userID, startDate, endDate);
RadGrid2.DataBind();
}
Результатом этого кода является удобная сетка, представленная пользователю, которая показывает транзакции, начисленные за последние 90 дней для этого конкретного пользователя.Как мне изменить мой запрос Linq, чтобы суммировать результаты по календарному месяцу, типу и описанию, как описано в разделе «требуемый результат» выше?Я работал над этим в течение долгого времени, и я действительно в замешательстве.Буду очень признателен за любую помощь или руководство.