从数据库返回字符串值

本文关键字:字符串 返回 数据库 | 更新日期: 2023-09-27 18:25:42

我正试图从数据库中获取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;
}

让这个表达式返回我需要的实际值的方法是什么?

从数据库返回字符串值

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>转换为字符串,而是需要使用类似SingleFirst的方法来从中获取一个对象

(如果Enumerable<T>中有多个对象,Single将抛出异常;如果Enumerable<T>中没有对象,First将抛出异常。如果您想要null而不是在这些情况下抛出异常,请使用SingleOrDefaultFirstOrDefault。)