Return 来自数据库的字符串值
Return string value from a database
我正在尝试从数据库中获取 Patient
的 Firstname
,但是当我 运行 这段代码只是一个 Linq 表达式字符串时,我得到的是什么。
public static string GetPatientName(int bedNumber)
{
var name = "";
using (var data = new HospitalDBDataContext())
{
if (data.Connection.State == ConnectionState.Closed)
data.Connection.Open();
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).ToString();
if (data.Connection.State == ConnectionState.Open)
data.Connection.Close();
data.Dispose();
}
return name;
}
如何使此表达式成为 return 我需要的实际值?
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).ToString();
应该是:
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).FirstOrDefault();
您实际上需要 select .First()
或 .FirstOrDefault()
。现在您正在将整个 IQueryable
语句转换为字符串。
问题是 ToString
调用给你 Linq 表达式
可能的解决方案。使用 FirstOrDefault 获取名字。
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname).FirstOrDefault();
或使用 string.Join 获取一个字符串中的所有名称,分隔符如 ,
(传递给 string.join 的第一个参数)。
name = string.Join(", " ,data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname));
Where
方法 returns 一个 Enumerable<T>
结果(患者),Select
方法 returns 一个新的 Enumerable<string>
每个患者的Firstname
s。
无需将 Enumerable<string>
转换为字符串,您需要使用 Single
或 First
之类的方法从中获取一个对象。
(Single
如果Enumerable<T>
中有多个对象就会抛出异常,First
如果[=11=中没有对象就会抛出异常=]。如果你想要 null
而不是在这些情况下的异常,请使用 SingleOrDefault
或 FirstOrDefault
。)
我正在尝试从数据库中获取 Patient
的 Firstname
,但是当我 运行 这段代码只是一个 Linq 表达式字符串时,我得到的是什么。
public static string GetPatientName(int bedNumber)
{
var name = "";
using (var data = new HospitalDBDataContext())
{
if (data.Connection.State == ConnectionState.Closed)
data.Connection.Open();
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).ToString();
if (data.Connection.State == ConnectionState.Open)
data.Connection.Close();
data.Dispose();
}
return name;
}
如何使此表达式成为 return 我需要的实际值?
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).ToString();
应该是:
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber))
.Select(x => x.Firstname).FirstOrDefault();
您实际上需要 select .First()
或 .FirstOrDefault()
。现在您正在将整个 IQueryable
语句转换为字符串。
问题是 ToString
调用给你 Linq 表达式
可能的解决方案。使用 FirstOrDefault 获取名字。
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname).FirstOrDefault();
或使用 string.Join 获取一个字符串中的所有名称,分隔符如 ,
(传递给 string.join 的第一个参数)。
name = string.Join(", " ,data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname));
Where
方法 returns 一个 Enumerable<T>
结果(患者),Select
方法 returns 一个新的 Enumerable<string>
每个患者的Firstname
s。
无需将 Enumerable<string>
转换为字符串,您需要使用 Single
或 First
之类的方法从中获取一个对象。
(Single
如果Enumerable<T>
中有多个对象就会抛出异常,First
如果[=11=中没有对象就会抛出异常=]。如果你想要 null
而不是在这些情况下的异常,请使用 SingleOrDefault
或 FirstOrDefault
。)