private bool SendClimbersListForTeam(string email, int?team_id, string subj, string body) { string fileName; if (team_id == null) { fileName = "LIST"; } else { fileName = "LIST_" + team_id.Value.ToString(); } fileName += "_" + DateTime.UtcNow.ToString("yyyyMMdd_HHmm", CultureInfo.CurrentCulture) + ".csv"; MemoryStream mStr = new MemoryStream(); try { StreamWriter swr = new StreamWriter(mStr, Encoding.Unicode); ONLteam[] teams; if (team_id == null) { teams = (from t in dc.ONLTeamsCompLinks where t.comp_id == compID select t.ONLteam).Distinct().ToArray(); } else { teams = (from tL in dc.ONLteams where tL.iid == team_id select tL).ToArray(); } //teams = (from t in teams // where t.ONLClimberCompLinks.Count(l => l.comp_id == compID) > 0 // select t).ToArray(); bool lead = comp.Lead(), speed = comp.Speed(), boulder = comp.Boulder(); try { var grpLstT = from g in dc.ONLGroups where g.ONLGroupsCompLinks.Count(gl => gl.comp_id == compID) > 0 orderby g.oldYear, g.genderFemale select g; List <ONLGroup> grpList = new List <ONLGroup>(); foreach (var g in grpLstT) { grpList.Add(g); } foreach (var t in teams) { int teamID = t.iid; swr.AutoFlush = true; swr.WriteLine(t.name); if (t.HasClimbers(compID)) { swr.WriteLine("№\tФамилия, Имя\tГ.р.\tРазр." + (lead ? "\tТр." : String.Empty) + (speed ? "\tСк." : String.Empty) + (boulder ? "\tБоулд." : String.Empty) ); foreach (var g in grpList) { var clmLstT = from c in dc.ONLClimberCompLinks where c.group_id == g.iid && c.team_id == teamID && c.state == Constants.CLIMBER_CONFIRMED && c.comp_id == compID orderby c.ONLclimber.surname, c.ONLclimber.name select c; int curClm = 0; swr.WriteLine(g.name + ":"); if (t.HasClimbers(compID, g.iid)) { foreach (var c in clmLstT.Where(w => w.queue_pos < 1)) { swr.WriteLine((++curClm).ToString() + ".\t" + c.ONLclimber.surname + " " + c.ONLclimber.name + "\t" + c.ONLclimber.age.ToString() + "\t" + c.qf + (lead ? ("\t" + getShortValue(c.lead)) : String.Empty) + (speed ? ("\t" + getShortValue(c.speed)) : String.Empty) + (boulder ? ("\t" + getShortValue(c.boulder)) : String.Empty)); } swr.WriteLine(); swr.WriteLine("Очередь:"); foreach (var c in clmLstT.Where(w => w.queue_pos > 0)) { swr.WriteLine(c.queue_pos.ToString() + ".\t" + c.ONLclimber.surname + " " + c.ONLclimber.name + "\t" + c.ONLclimber.age.ToString() + "\t" + c.qf); } swr.WriteLine(); swr.WriteLine("Неподтверждённые:"); curClm = 0; var clmLstU = from c in dc.ONLClimberCompLinks where c.group_id == g.iid && c.team_id == teamID && c.comp_id == compID && c.state != Constants.CLIMBER_CONFIRMED orderby c.ONLclimber.surname, c.ONLclimber.name select c; foreach (var c in clmLstU) { swr.WriteLine((++curClm).ToString() + "\t" + c.ONLclimber.surname + " " + c.ONLclimber.name + "\t" + c.ONLclimber.age.ToString() + "\t" + c.qf + "\t" + (c.state == Constants.CLIMBER_PENDING_DELETE ? "Удаление" : (c.ONLClimberCompLink1.Count == 0 ? "Добавление" : "Правка")) ); } } else { swr.WriteLine("Участники в данную группу не заявлены"); } swr.WriteLine(); swr.WriteLine(); } } else { swr.WriteLine("УЧАСТНИКИ НЕ ЗАЯВЛЕНЫ"); } } string sTmp; MailService ms = new MailService(dc, compID); return(ms.SendMail(email, subj, body, MailPriority.Normal, fileName, mStr, out sTmp)); } finally { swr.Close(); } } finally { mStr.Close(); } }