我有一个使用 Entity Framework 的 C# 应用程序。我有一张看起来像这样的桌子:
ID FILENO Col1 Col2 Col3
---------------------------------------
1 19873 42 129 145
2 19873 42 129 41
3 19873 42 130 18
4 19873 43 158 168
我需要按
Col1
,然后按Col2
,然后按Col3
对表格进行排序,然后选择“最低”记录。在这种情况下,我应该选择记录 2。我试过这段代码:
var model = db.Cxxxx.Where(x => x.FILENO == '19873').FirstOrDefault();
但那只是得到一个记录,不一定是“最低”记录。我知道有一个
.Min<>()
选项,但我不知道它是如何工作的。
非常感谢任何帮助。
试试这个:
var model = db.Cxxxx.Where(x => x.FILENO == "19873")
.OrderBy(x => x.Col1)
.ThenBy(x => x.Col2)
.ThenBy(x => x.Col3)
.FirstOrDefault();
这当然是假设“最低记录”是指三级排序的最高记录。
应另一位成员的要求,我将添加一些解释,尽管对我来说这似乎很简单:
Where
方法是根据您要查找的文件号的记录过滤您的集合。
OrderBy
方法基于 Col1
执行第一个排序。
ThenBy
基于 Col2
对之前的结果进行第二次排序。
接下来的ThenBy
根据Col3
对之前的结果进行第三次排序。
选择第一个结果应该会产生所需的记录。
请注意,如果没有找到与文件号匹配的记录,模型将为空
好的,我假设您已经正确设置了 DBContext。
为此,我们可以使用两种方式
var lowestRecord = context.MyEntities
.Where(e => e.FILENO == 19873) // Filter by FILENO if needed
.OrderBy(e => e.Col1)
.ThenBy(e => e.Col2)
.ThenBy(e => e.Col3)
.FirstOrDefault();
if (lowestRecord != null)
{
// Use lowestRecord
}
else
{
// No records found
}
上面的代码使用 FirstOrDefault,下面的代码使用 Min
var lowestRecord = context.MyEntities
.Where(e => e.FILENO == 19873) // Filter by FILENO if needed
.OrderBy(e => e.Col1)
.ThenBy(e => e.Col2)
.ThenBy(e => e.Col3)
.Min();