作为一个辅助项目,我正在开发一个使用C#和WPF创建表单的基本银行系统。
目前,我有四种形式和两种不同的全球类。
表格是:
我的问题是当我尝试显示当前余额时。我尝试使用linq通过将数据集转换为数据表来查询数据集。但是,当我尝试显示余额时,我得到了这个而不是余额:
System.Linq.Enumerable + WhereSelectEnumerableIterator'2 [的System.Data.DataRow,System.String]
我正在将所有内容转换为字符串,但不会更改此消息。我也尝试返回余额的整数值,但这会导致更复杂的错误。
我附加了应该在Options Form类的标签上显示余额的代码,以及在BankData.cs中找到余额的代码
BankData.cs
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where (string)dr["AccountNo"] == accountNumber
select dr.Table.Rows[5].ToString());
//return dt.Rows[rowNum][columName].ToString();
return id.ToString();
}
DisplayBalance cs:
lblcurBal.Content = "Current Balance: " + BankData.FindBalance();
//Find the Balance of the Account Number here.
请帮忙。
答案 0 :(得分:1)
试试这个:代码中的一个小改动
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where dr["AccountNo"] == accountNumber
select dr["BalanceColumnName"]).FirstOrDefault();
return id.ToString();
}
修改强>
这对Paul来说是有用的,正如他在下面的评论中所描述的那样:
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where Convert.ToString(dr["AccountNo"]) == accountNumber
select dr["BalanceColumnName"]).FirstOrDefault();
return id.ToString();
}
答案 1 :(得分:0)
您需要在此特定情况下使用id.FirstOrDefault();
而不是id.ToString();
作为返回值,因为FirstOrDefault
实际上从您的linq查询中获取数据,而ToString
只是查询内部字符串表示。
换句话说,变量id
的值不是您编写的查询的结果,而是查询本身。 FirstOrDefault
从此查询中检索第一个结果。
答案 2 :(得分:0)
问题是id
是一个枚举,它是一组值,看起来像是期待单个值。
假设DataTable
的 第6 列代表余额,
public static string FindBalance()
{
DataTable dt = new DataTable();
dt = ds.Tables[0];
var id = (from DataRow dr in dt.Rows
where (string)dr["AccountNo"] == accountNumber
select dr[5].ToString()).FirstOrDefault();
//return dt.Rows[rowNum][columName].ToString();
return id== null? "" : id;
}
答案 3 :(得分:0)
您需要使用FirstOrDefault()
return Convert.ToString(id.FirstOrDefault());
您实际上是在迭代器上调用ToString
,而不是实际获取结果。
答案 4 :(得分:0)
我的工作基于vedbhawsar的解决方案。
将BankData.cs类的代码更改为:
var id = (from DataRow dr in dt.Rows
where Convert.ToString(dr["AccountNo"]) == accountNumber
select dr["Balance"]).FirstOrDefault();
return id.ToString();
它允许我显示已登录用户的余额。
非常感谢;现在我只需要复制它以获取最小剩余余额。 当它不起作用时期待我回复。
再次感谢帮助我的每个人得出这个结论。