C#从wcf服务方法返回linq结果作为列表,然后在aspxweb表单页面中使用它

本文关键字:表单 aspxweb 然后 列表 方法 服务 wcf 返回 linq 结果 | 更新日期: 2023-09-27 18:20:40

我是C#的新手我正在尝试使用wcf服务应用程序,该应用程序引用数据实体模型从表中选择一行。在搜索s.o.时,我找到了一种将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];
    }

服务很好。我也愿意接受更好的方法的建议。

C#从wcf服务方法返回linq结果作为列表,然后在aspxweb表单页面中使用它

或者您可以从服务返回字符串,您可以返回对象列表。

如果必须返回字符串,则必须使用String.split方法拆分序列化的数据,但这确实是一个糟糕的方法。如果必须返回字符串,则至少可以使用更好的序列化策略,如JSON或XML。

但要真正考虑更改您的服务接口。

现在让我们回到使用您的结果:

  • 您正在使用服务返回具有该ID的记录列表
  • 我假设ID是唯一的,您将在列表中获得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];
        }
    }

方法返回一个List<string>。您只需要将它存储在List<string>的实例中。你必须这样做:

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

更新:

正如你在评论中所说,它正在返回一个数组:

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

或使用隐含变量:

  var columns = accInfoClient.getAccountInfo(id);

如果我能正确理解你的问题,只需像这样写

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

您将得到一个充满数据的列表。