我试图从数据库中获取Patient
的{{1}},但是当我运行这段代码时,我得到的只是一个Linq表达式字符串。
Firstname
使这个表达式返回我需要的实际值的方法是什么?
答案 0 :(得分:5)
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
语句转换为字符串。
答案 1 :(得分:1)
问题是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));
答案 2 :(得分:1)
Where
方法会返回Enumerable<T>
个结果(患者),而Select
方法会返回一个新的Enumerable<string>
,每个患者都会Firstname
个
不是将Enumerable<string>
转换为字符串,而是需要使用Single
或First
等方法从中获取一个对象。
(如果Single
中有多个对象,Enumerable<T>
将抛出异常,如果First
中没有对象,Enumerable<T>
将抛出异常。如果您希望SingleOrDefault
而不是例外情况,请使用FirstOrDefault
或null
。)