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];
}
服务很好。我也愿意接受更好的方法的建议。
或者您可以不从服务返回字符串,您可以返回对象列表。
如果必须返回字符串,则必须使用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>();
您将得到一个充满数据的列表。