Return 来自数据库的字符串值

Return string value from a database

我正在尝试从数据库中获取 PatientFirstname,但是当我 运行 这段代码只是一个 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>每个患者的Firstnames。

无需将 Enumerable<string> 转换为字符串,您需要使用 SingleFirst 之类的方法从中获取一个对象。

(Single如果Enumerable<T>中有多个对象就会抛出异常,First如果[=11=中没有对象就会抛出异常=]。如果你想要 null 而不是在这些情况下的异常,请使用 SingleOrDefaultFirstOrDefault。)