从 Linq 查询中获取一个 int 而不是 string

Get an int out of a Linq query instead of string

我是 c#、Linq 和 .NET 的新手。我有一些代码执行查询以从数据库中的 table 获取最后一条记录。我尝试访问的字段是一个 int,但是当我尝试打印它时,我得到 System.Data.Objects.ObjectQuery`1[System.Int32]。 这是代码:

public void getLastProgNumber() 
        {
            using (var db = new IntranetEntities())
            {
                var value = (db.table.OrderByDescending(ai => ai.NumProgHWSW).GroupBy(a => a.NumProgHWSW).Select(g => Convert.ToInt32(g.FirstOrDefault())));
                MessageBox.Show(value.ToString());
            }            
        }

我需要将其转换为 int 类型,如果可能的话 return,谢谢。 (现在我正在使用 void 因为我想在 return 之前得到正确的结果)

如果想从数据库中获取最后一条记录table,有多种方法。但是做GroupBy肯定不是其中之一。

您可以通过执行 OrderByDescending 对行进行排序,以便具有该列最大值的行位于第一行,然后您可以执行 FirstOrDefault.

var val = db.table.OrderByDescending(ai => ai.NumProgHWSW).FirstOrDefault();
// val is the row with maximum value of NumProgHWSW.
// you can display the value of NumProgHWSW in messagebox by doing following.
MessageBox.Show(val.NumProgHWSW);

如果您想直接从 LINQ 查询中获取变量中 NumProgHWSW 的最大值。你可以通过

var val = db.table.OrderByDescending(ai => ai.NumProgHWSW).FirstOrDefault().NumProgHWSW;
MessageBox.Show(val);

您也可以使用 Max LINQ 方法来获取最大值,而无需执行 OrderByDescending。

var val = db.table.Max(ai => ai.NumProgHWSW);
MessageBox.Show(val);

使用 Max 是比上面两个更好的方法,因为它在数据检索之前不对 table 行进行排序,这样当 table 有大量行时它工作得更快行。