Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否获取数据库中表的最后一条记录?_C#_Linq_Visual Studio 2008 - Fatal编程技术网

C# 是否获取数据库中表的最后一条记录?

C# 是否获取数据库中表的最后一条记录?,c#,linq,visual-studio-2008,C#,Linq,Visual Studio 2008,我正在开发一个项目,在用户插入客户的数据后,他想打印客户的ID和姓名, 这是ID的代码 int getPatnID() { int ID = (from i in Db.Patients select i.patn_ID).Max(); return ID; } 我已经写了代码来得到这个名字,但我不能完成它 string getPatnName() { string name = (fr

我正在开发一个项目,在用户插入客户的数据后,他想打印客户的ID和姓名, 这是ID的代码

int getPatnID()
    {
        int ID = (from i in Db.Patients
                  select i.patn_ID).Max();
        return ID;
    }
我已经写了代码来得到这个名字,但我不能完成它

string getPatnName()
    {
        string name = (from n in Db.Patients
                       select n.patn_name).

        return name;
    }
我应该怎样写才能完成它

string getPatnName() {
    string name = Db.Patients.Last(p => p.patn_ID).patn_name;
    return name;
}
我建议你花更多的时间学习LINQ——它是一个非常丰富和强大的图书馆:


我建议你花更多的时间学习LINQ——它是一个非常丰富和强大的库:

更改
getPatnName
获取id:

string getPatnName(int id)
{
    string name = (from n in Db.Patients
                   where n.patn_ID == id
                   select n.patn_name).SingleOrDefault();

    return name;
}

并将
getPatnName()
更改
getPatnName
以获取id的结果提供给它:

string getPatnName(int id)
{
    string name = (from n in Db.Patients
                   where n.patn_ID == id
                   select n.patn_name).SingleOrDefault();

    return name;
}

并为其提供
getPatnID()

的结果。如果您试图获取刚刚输入的最后一位患者的姓名,并且您拥有第一次查询的ID,那么您只需要在LINQ中使用where子句

string name = (from n in Db.Patients
       where n.patn_ID == ID
       select n.patn_name);

如果您试图获取刚刚输入的最后一位患者的姓名,并且您拥有第一次查询的ID,那么您只需要在LINQ中使用where子句

string name = (from n in Db.Patients
       where n.patn_ID == ID
       select n.patn_name);

以这种方式获取身份证是错误的。不确定您正在使用什么,但在保存更改时,linq-2-sql和entity framework都会填写实体Id:

    Patient patient = new Patient();
    Console.WriteLine(patient.Id); // will NOT be filled in
    Db.Patients.Add(patient);
    Db.SubmitChanges(); // SaveChanges in EF
    Console.WriteLine(patient.Id); // will be filled in

以这种方式获取身份证是错误的。不确定您正在使用什么,但在保存更改时,linq-2-sql和entity framework都会填写实体Id:

    Patient patient = new Patient();
    Console.WriteLine(patient.Id); // will NOT be filled in
    Db.Patients.Add(patient);
    Db.SubmitChanges(); // SaveChanges in EF
    Console.WriteLine(patient.Id); // will be filled in

为什么不创建一个patient类并返回一个实例,如下所示

public class Patient
{
    public int PatientID { get; set; }
    public string Name { get; set; }
}


static Patient getDetails()
    {
        using (DataClasses1DataContext db = new DataClasses1DataContext())
        {
            var c = (from x in db.Patients.OrderByDescending(u => u.PatientID)
                     select new Patient()
                     {
                         PatientID = x.PatientID,
                         Name = x.Name
                     }).FirstOrDefault();
            return c;
        }

为什么不创建一个patient类并返回一个实例,如下所示

public class Patient
{
    public int PatientID { get; set; }
    public string Name { get; set; }
}


static Patient getDetails()
    {
        using (DataClasses1DataContext db = new DataClasses1DataContext())
        {
            var c = (from x in db.Patients.OrderByDescending(u => u.PatientID)
                     select new Patient()
                     {
                         PatientID = x.PatientID,
                         Name = x.Name
                     }).FirstOrDefault();
            return c;
        }

这应该总是在执行时获得最后一条插入的记录(假设patn_id是自动递增的)


这应该总是在执行时获得最后一条插入的记录(假设patn_id是自动递增的)



我从来没有见过选择后的where。这在Linq中有效吗?在select之后有where,还有join:),强大的库;)我从来没有见过选择后的where。这在Linq中有效吗?在select之后有where,还有join:),强大的库;)只是一个警告…如果有多个客户端对DB进行操作,则在插入后抓取最后一条记录是危险的。只是一个警告…如果有多个客户端对DB进行操作,则在插入后抓取最后一条记录是危险的。不支持查询运算符“last”。我在使用时遇到了此错误抱歉,我没有意识到您使用的OR/M不支持最后一个运算符。用更新的代码试试看。基本上,它所做的是选择与您指定的谓词匹配的最后一个元素-在本例中,是每个患者记录的ID。我以前尝试使用last,但它不起作用,但感谢您的建议,是的,我认为它是一个非常强大的库不支持查询运算符“last”。我在使用时遇到了此错误抱歉,我没有意识到您使用的OR/M不支持最后一个运算符。用更新的代码试试看。基本上,它所做的是选择与您指定的谓词相匹配的最后一个元素—在本例中,是每个患者记录的ID。我以前尝试过使用last,但它不起作用,但感谢您的建议,是的,我认为它是一个非常强大的库请注意我对您问题的评论。如果只有一个客户机在DB上运行,那么通过读取最后一条记录来获取ID是可以的。否则你需要重新思考逻辑。注意我对你问题的评论。如果只有一个客户机在DB上运行,那么通过读取最后一条记录来获取ID是可以的。否则,你需要重新考虑逻辑。为一次使用获取ID和名称不是太长吗?对不起,你是对的,我没有正确阅读问题&只是认为所需要的只是从表中获取最后一个值的方法为一次使用获取ID和名称不是太长吗?对不起,你是对的,我没有阅读问题正确&我只是认为所需要的只是一种从表格中获取最后一个值的方法。我不认为这是错误的,因为它已经工作了,并且得到了正确的结果,这是偶然的。就像前面提到的@ncydan一样,在多用户场景中,这肯定会失败。我不认为这是错误的,因为它已经工作了,并且意外地得到了正确的结果。就像前面提到的@ncydan一样,在多用户场景中,这肯定会失败。