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

zour9fqk  于 2023-03-27  发布在  C#
关注(0)|答案(2)|浏览(172)

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

ltqd579y

ltqd579y1#

试试这个:

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对上一个结果执行第三次排序。选择第一个结果应该会产生所需的记录。
请注意,如果没有找到与文件号匹配的记录,则model将为null

vxf3dgd4

vxf3dgd42#

好的,我假设您已经正确地设置了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();

相关问题