таблица групп по таблице внешних ключей в mvc5 с использованием linq - PullRequest
0 голосов
/ 19 января 2019

привет, как вы, ребята? Мне нужна помощь Позвольте мне объяснить вам в первую очередь. У меня есть таблица с группой пациентов в месяц, это означает, что это процесс составления данных за месяц. Я хочу собирать данные о пациентах в месяц в соответствии с типом заболевания. Я имею в виду общее количество пациентов в месяц, в зависимости от типа заболевания, которое я пытался собирать данные по месяцам, но я не могу собрать данные по типу заболевания, здесь мне нужна ваша помощь

моя таблица пайонов вот так

{
    public class Pation
    {
        [Key]
        public int Id { get; set; }
        public string PationName { get; set; }
        public int Age { get; set; }
        public Sex Sex { get; set; }
        public DateTime DateWared { get; set; } = DateTime.UtcNow.AddHours(3);
        public int Type_diseaseId { get; set; }
        [ForeignKey("Type_diseaseId")]
        public virtual Type_disease Type_diseases { get; set; }
        public ApplicationUser User { get; set; }
    }
    public enum Sex
    {
        boys,
        girls,
    }
}

модель типа болезни, которая является внешним ключом патиона, и я хочу сгруппировать ее по типу

{
    public class Type_disease
    {
        [Key]
        public int Id { get; set; }
        public string Namedisease { get; set; }
        public virtual ICollection<Pation> Pations { get; set; }

    }
}

я сгруппировал патион по возрасту в сумму значений в модели, которую я назвал

UserRing и вот так

{
    public class UserRange
    {
        public string AgeRange { get; set; }
        public int Count { get; set; }
        public string Gender { get; internal set; }
        public string grilsTotal { get; internal set; }
        public string boysTotal { get; internal set; }
        public string Type_d { get; internal set; }
    }

}

и я добавляю actionResult с именем ShowPation в группу с помощью результата pation, подобного этому

public ActionResult ShowPation()
     {
         var query1 = from t in db.Pations()
                      let Agerange =
                       (
                         t.Age >= (0) && t.Age < (1) ? "Under year" :
                         t.Age >= (1) && t.Age < (5) ? "1 _ 4" :
                         t.Age >= (5) && t.Age < (15) ? "5 _ 14" :
                         t.Age >= (15) && t.Age < (25) ? "15 _ 24" :
                         t.Age >= (25) && t.Age < (45) ? "24 _ 44" :
                         "over 45"
                       )
                      let Sex = (t.Sex == 0 ? "boys" : "girls")
                      group new { t.Age, t.Sex, Agerange } by new { t.DateWared.Year, t.DateWared.Month, Agerange, Sex } into g
                      select g;

                  var query2 = from g in query1
                      select new { mycount = g.Count(), g.Key.Year, g.Key.Month, g.Key.Agerange, g.Key.Sex };

                 var query3 = from i in query2
                      group i by new { i.Year, i.Month} into g
                      select g;

         Dictionary<string, List<UserRange>> urn = new Dictionary<string, List<UserRange>>();
         foreach (var item in query3)
         {
             foreach (var item1 in item)
             {
                 if (!urn.ContainsKey(item.Key.Month + "/" + item.Key.Year))
                 {
                     urn[item.Key.Month + "/" + item.Key.Year] = new List<UserRange>();
                 }
                 urn[item.Key.Month + "/" + item.Key.Year].Add(new UserRange { Count = item1.mycount, AgeRange = item1.Agerange, Gender = item1.Sex });

             }
             urn[item.Key.Month + "/" + item.Key.Year] = urn[item.Key.Month + "/" + item.Key.Year].OrderByDescending(i => i.AgeRange).ToList();//sort the data according to Agerange
         }
         return View(urn);
     }

с таким видом

@model  Dictionary<string, List<The_Hospital_Project.Models.UserRange>>
        <table border="1" class="table table-responsive table-bordered table-hover table-striped " style="height: 145px;text-align: center; border: solid 1px;border-radius: 5px;direction: rtl;">
            @foreach (string key in Model.Keys)
            {
             <tr>
                <td colspan="17"> <center>@key</center></td>
             </tr>
               <tr>                  

                   @foreach (The_Hospital_Project.Models.UserRange item1 in Model[key])
                   {
                       <td style="height: 57px;">@item1.AgeRange</td>
                   }
               </tr>
               <tr>             

                   @foreach (The_Hospital_Project.Models.UserRange item1 in Model[key])
                   {
                       <td>@item1.Gender</td>
                   }
               </tr>
            <tr>

                @foreach (The_Hospital_Project.Models.UserRange item1 in Model[key])
                {
                    <td>@item1.Count</td>
                }
            </tr>

            }
        </table>

Таблица просто собирает все записи каждый месяц. Я хочу отсортировать записи по типу заболеваний. Каждый месяц, пока код работает хорошо для сбора данных по месяцам

Я хочу собирать данные по заболеваниям в течение каждого месяца в зависимости от модели типа заболевания, которая равна

внешний ключ pation должен быть результатом, подобным изображению в каждом месяце здесь

как я могу это сделать, ребята, я так старался, но я не могу этого сделать, пожалуйста, ребята, помогите мне

1 Ответ

0 голосов
/ 19 января 2019

То, что я хотел бы сделать, это загрузить все и сначала выполнить логику следующим образом. Сначала группируй по болезням, затем я делю по месяцам и, наконец, группирую и суммирую по возрасту, полу или тому, что тебе нужно. И после того, как я получу результат, я перевожу его, а затем реорганизую, чтобы он получал данные непосредственно из базы данных с помощью запроса linq :) Так что я бы начал с чего-то вроде этого

var diseaseGroupByMonth = Pation.GroupBy(x => x.DateWarred.Month);
//might need to set year as well here if you have data for multiple years
var groupDiseaseByMonth = diseaseGroup.GroupBy(x => x.Type_diseaseID)
var group...

Теперь это может быть немного утомительно, но мне проще сначала получить нужные данные, а потом попробовать и сделать лучше.

редактирование:

public DiseaseMonthRange ()
{
   public DateTime Month (get; set;)
   public List<DiseaseGroup> Group (get; set;)
}

public DiseaseGroup ()
{
  public int DiseaseId (get; set;)
  public List<UserRange> (get; set;)
}

Затем заполните эти модели из групп и покажите эти данные.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...