using System; using System.Collections.Generic; using System.Linq; namespace Wierszowki.Core.Linq { public partial class WierszowkiDataContext { public Author GetAuthorById(int id) { return Authors.Single(a => a.Id == id); } public List GetAuthors() { return Authors.ToList(); } public List GetUsers() { this.GetTable(); return Users.ToList(); } public User GetUserById(int id) { return Users.Single(u => u.Id == id); } public User GetUserByLogin(string login) { return Users.Single(u => u.Login == login); } public bool LoginUser(string login, string password) { var query = from u in Users where u.Login == login && u.Password == password select u; return query.Count() == 1; } public List GetMagazines() { return Magazines.ToList(); } public List GetEmploymentTypes() { return EmploymentTypes.ToList(); } public List GetItemTypes() { return ItemTypes.ToList(); } public IQueryable FindIssuesByMagazineId(int magazineId) { var startDate = DateTime.Now.AddMonths(-1); var endDate = DateTime.Now.AddMonths(1); var query = from i in Issues where i.MagazineId == magazineId && i.Date >= startDate && i.Date <= endDate select i; return query; } public IQueryable FindIssuesByMagazineItemId(int issueId) { var issue = Issues.Single(i => i.Id == issueId); return FindIssuesByMagazineId(issue.MagazineId); } public List FindItemsByYearMonthAndEmploymentType(int year, int month, int employmentType) { var query = from magazineItem in MagazineItems where magazineItem.Date.Month == month && magazineItem.Date.Year == year group magazineItem by new { magazineItem.Author, magazineItem.Issue.MagazineId} into m select new Report { FirstName = m.Key.Author.FirstName, LastName = m.Key.Author.LastName, Price = m.Sum(magazineItem => magazineItem.Price), Bonus = m.Sum(magazineItem => magazineItem.Bonus), Magazine = m.Key.MagazineId.ToString() }; return query.ToList(); } public List FindItemsByYearMonthAndAuthor(int year, int month, int author) { var query = from magazineItem in MagazineItems where magazineItem.Date.Month == month && magazineItem.Date.Year == year && magazineItem.AuthorId == author orderby magazineItem.Issue.MagazineId descending select magazineItem; return query.ToList(); } public List GetAuthorsReport(int year, int month) { var authors = GetAuthors(year, month); var reports = new List(); foreach (var author in authors) { var report = new Report { FirstName = author.FirstName, LastName = author.LastName, Price = author.Price.Value, Bonus = author.Bonus.Value }; reports.Add(report); } return reports; } public Dictionary> GetAuthorsByMagzinesReport(int year, int month, List authors, List magazines) { var result = new Dictionary>(); foreach (var author in authors) { foreach (var magazine in magazines) { if (!result.ContainsKey(author.Id)) result.Add(author.Id, new Dictionary()); if (!result[author.Id].ContainsKey(magazine.NickName)) result[author.Id].Add(magazine.NickName, decimal.Zero); } } var authorsByMagazines = GetAuthorsByMagzines(year, month); foreach (var authorsByMagazine in authorsByMagazines) { if (result.ContainsKey(authorsByMagazine.Id)) result[authorsByMagazine.Id][authorsByMagazine.NickName] = authorsByMagazine.Price.Value + authorsByMagazine.Bonus.Value; } return result; } public void AddUser(User user) { InsertUser(user); } } }