C # возвращает результат linq в виде списка из метода сервиса wcf, а затем использует его на странице веб-форм aspx

1

Я новичок в С# Я пытаюсь использовать приложение службы wcf, которое ссылается на модель объекта данных, чтобы выбрать строку из таблицы. Поиск, поэтому я нашел способ вернуть результаты запроса linq в виде списка, хотя у меня нет нашел способ еще использовать список в моей странице веб-форм aspx. Я не знаю, как загрузить список на странице aspx, и до сих пор мои исследования в msdn мне не помогли. Я пытался выразить свою проблему наилучшим образом, чтобы вы поняли, вот мой код:

код приложения службы wcf:

public List<string> getAccountInfo(int uid)
    {

        List<string> result = new List<string>();

        try
        {

            using (paragon_db_Models.user_accounts_Model context = new paragon_db_Models.user_accounts_Model())
            {

                var query = from uacc in context.user_accounts
                            where uacc.user_account_id == uid
                            select uacc;

                foreach (var c in query)
                {
                    string row = c.user_account_id + ";" + c.order_id + ";" + c.order_state + ";" + c.estimated_cost + ";" + c.instance_form + ";" + c.time_scedule + ";" + c.invoice + ";" + c.notification + ";" + c.user_account_type + ";" + c.username + ";" + c.password;
                    result.Add(row);
                }

            }
            return result;
        }
        catch (Exception) 
        {
            return result;
        }
    }

код aspx.cs

protected void Page_Load(object sender, EventArgs e)
    {
        accountInfo_Ref.IaccountInfoSrvcClient accInfoClient = new    accountInfo_Ref.IaccountInfoSrvcClient();

        int id = (int)Session["UserId"];

        List<string> columns = new List<string>(accInfoClient.getAccountInfo(id));

        id_lbl.Text = columns[0];
        order_id_lbl.Text = columns[1];
    }

Сервис отлично работает. Я также открыт для предложений по улучшению способов сделать это.

Теги:
linq
list

3 ответа

0
Лучший ответ

Или вы не можете вернуть строки из своего сервиса, вы можете вернуть список объектов.

Если вы ДОЛЖНЫ возвращать строки, вы должны разделить сериализованные данные с помощью метода String.Split, но это действительно плохой метод. Если вы ДОЛЖНЫ возвращать строки, вы могли бы хотя бы использовать лучшую стратегию сериализации, такую как JSON или XML.

Но действительно подумайте об изменении своего сервисного интерфейса.

Теперь вернемся к использованию результатов:

  • вы используете службу для возврата списка записей с этим идентификатором
  • я предполагаю, что идентификатор уникален, и вы всегда будете получать 0 или 1 результат в своем списке
  • каждая "строка", добавленная в список, содержит информацию об учетной записи
  • поэтому каждая строка должна быть разделена для получения информации

Код:

protected void Page_Load(object sender, EventArgs e)
    {
        accountInfo_Ref.IaccountInfoSrvcClient accInfoClient = new    accountInfo_Ref.IaccountInfoSrvcClient();

        int id = (int)Session["UserId"];

        List<string> rows = new List<string>(accInfoClient.getAccountInfo(id));
        // display the first row
        string row = rows.FirstOrDefault();
        if (String.IsNullOrEmpty(row))
        {
           // record cannot be found
        }
        else
        {
            string[] details = row.Split(';');

            id_lbl.Text = details[0];
            order_id_lbl.Text = details[1];
        }
    }
  • 0
    Consider учти, поэтому я сказал, что я открыт для предложений. Можете ли вы дать мне пример?
  • 0
    Пример возврата собственного объекта из интерфейса WCF: codeproject.com/Questions/465564/returning-own-object-in-WCF
Показать ещё 6 комментариев
0

метод возвращает List<string> Вам просто нужно сохранить его в экземпляре List<string>. Вы должны сделать вот так:

List<string> columns = accInfoClient.getAccountInfo(id);

ОБНОВИТЬ:

он возвращает массив, как вы сказали в комментариях:

string[] columns = accInfoClient.getAccountInfo(id);

или использовать переменную implict:

  var columns = accInfoClient.getAccountInfo(id);
  • 0
    Это было первое, что я попробовал, но я получил красную линию, и он говорит, что не может неявно преобразовать тип 'string []' в 'System.Collections.Generic.List <string>'
  • 0
    @ D3v возвращается как массив строк, см. Обновление
Показать ещё 1 комментарий
0

Если я правильно понял ваш вопрос, просто напишите так

List<string> columns = accInfoClient.getAccountInfo(id).ToList<string>();

Вы получите список, заполненный данными.

  • 0
    Я пробовал это, но я получаю ошибку Не могу неявно преобразовать тип 'string []' в 'System.Collections.Generic.List <string>'
  • 0
    @ Dv3 я обновил ответ, пожалуйста, проверьте это сейчас.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню