Преобразование данных внутри модели в массив данных или массив - PullRequest
2 голосов
/ 14 марта 2020

Я довольно новичок в c# MVC и буду очень признателен, если вы поможете мне или хотя бы подскажете, как решить эту проблему. Итак, у меня есть этот метод, который фильтрует некоторую информацию из моей БД и возвращает список (System.Collections.Generi c .List`1 [Users.AspNetUser]).

 private static AspNetUser PopulateModel(string country, [Optional]int Agefrom, [Optional] int Ageto)
    {
        using (DBEntities entities = DBEntities()) //using ADOnet DB
        {
            AspNetUser model = new AspNetUser()  
            {
                WebUsers = (from c in entities.AspNetUsers
                            where c.Country == country || string.IsNullOrEmpty(country)
                            where c.AgeofUser >= Agefrom && c.AgeofUser <= Ageto || string.IsNullOrEmpty(Agefrom.ToString()) || string.IsNullOrEmpty(Ageto.ToString())
                            select c).ToList(),
                Countries = (from c in entities.AspNetUsers
                             select new SelectListItem { Text = c.Country, Value = c.Country }).Distinct().ToList(),
                Ages = (from c in entities.AspNetUsers
                        select c.AgeofUser)
                                      };
           return model;
        }
    }

после этого я пытаюсь отобразить диаграмму из этой отфильтрованной информации, но googlecharts запрашивает у меня либо массив, либо данные, чтобы связать мои данные. Моя проблема в том, что я не могу преобразовать этот список в DT или в массив. Я оставлю вам сценарий на всякий случай.

<script>
        google.charts.load('current', { 'packages': ['table'] });
        google.charts.setOnLoadCallback(drawTable);

        function drawTable() {
            //here google asks for data in a DT or array with the method arraytotable()
            var data = new google.visualization.DataTable(@Model.WebUsers);//here I get "Uncaught SyntaxError: Unexpected end of input" for the bad input
            data.addColumn('string', 'Department');
            data.addColumn('number', 'Revenues');
            data.addRows(data1);
            var table = new google.visualization.Table(document.getElementById('table_div'));

            table.draw(data, { showRowNumber: true, width: '100%', height: '100%' });
        }

СПАСИБО!

1 Ответ

1 голос
/ 14 марта 2020

Глядя на ваш код,

  1. Вы используете неправильный формат для инициализации VisualizationDataTable и

  2. Вам нужны только веб-пользователи, так как он уже содержит все записи.


Вот 2 варианта:

  • Вы можете изменить свою модель в контроллере, чтобы использовать ее правильно формат, как показано здесь https://developers.google.com/chart/interactive/docs/reference. Вы сможете сделать это с помощью .toJson / JSONStringify или .toArray()

  • Или более простым вариантом, используйте пустой инициализатор и создайте переменную строку с записями веб-пользователей. Измените ваш скрипт так, чтобы он использовал следующий код:

function drawTable() {
   // create row variable, replace u.Name with a string property from your model
   var rows = [
      @{
         foreach(var u in Model.WebUsers){
            <text>['@u.Name',@u.AgeofUser],</text>
         }
      }
   ]

   // use empty initializer
   var data = new google.visualization.DataTable();

   // add your columns
   data.addColumn('string', 'Name');
   data.addColumn('number', 'Age');

   // add the row variable earlier
   data.addRows(rows);

   var table = new google.visualization.Table(document.getElementById('table_div'));
   table.draw(data, { showRowNumber: true, width: '100%', height: '100%' });
}
...