从数据库返回字符串值
本文关键字:字符串 返回 数据库 | 更新日期: 2023-09-27 18:25:42
我正试图从数据库中获取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;
}
让这个表达式返回我需要的实际值的方法是什么?
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();
您需要实际选择.First()
或.FirstOrDefault()
。现在,您正在将整个IQueryable
语句强制转换为一个字符串。
问题是ToString
调用,它为您提供Linq表达式
可能的解决方案。使用FirstOrDefault获取名字。
name = data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname).FirstOrDefault();
或者使用字符串。Join以获得一个字符串中的所有名称,该字符串具有类似,
的分隔符(传递给string.Join的第一个参数)。
name = string.Join(", " ,data.Patients.Where(x => x.BedNumber.Equals(bedNumber)).Select(x => x.Firstname));
Where
方法返回结果(患者)的Enumerable<T>
,Select
方法返回新的Enumerable<string>
和每个患者的Firstname
。
您不需要将Enumerable<string>
转换为字符串,而是需要使用类似Single
或First
的方法来从中获取一个对象
(如果Enumerable<T>
中有多个对象,Single
将抛出异常;如果Enumerable<T>
中没有对象,First
将抛出异常。如果您想要null
而不是在这些情况下抛出异常,请使用SingleOrDefault
或FirstOrDefault
。)