C# 实体框架:按 3 列排序

问题描述 投票:0回答:2

我有一个使用 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<>()
选项,但我不知道它是如何工作的。

非常感谢任何帮助。

c# entity-framework linq
2个回答
0
投票

试试这个:

 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
对之前的结果进行第三次排序。 选择第一个结果应该会产生所需的记录。

请注意,如果没有找到与文件号匹配的记录,模型将为空


-1
投票

好的,我假设您已经正确设置了 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();
© www.soinside.com 2019 - 2024. All rights reserved.