c# - Entity Framework 排序列表

我正在从数据库中获取行列表(我将其传递回我的 Controller ,然后使用 Razor 语法在 View 中进行处理),但我无法按特定的数据库列对列表进行排序。

public class GetTableDetails
{

    public string Column1 { get; set; }
    public string Column2 { get; set; }
    public string Column3 { get; set; }
    public string Column4PDT { get; set; }
    public string Column5 { get; set; }

    public static List<GetTableDetails> GetDetails(ApplicationDbContext _context)
    {

        var tableEntriesCount = _context.TableName.Count();
        var Table = _context.TableName.FirstOrDefault();
        string[,] table = { };

        List<GetTableDetails> mainList = new List<GetTableDetails>();

        List<string> column1List = _context.TableName.Where(c => c.Column1Title != null).Select(c => c.Column1Title).ToList();
        List<string> column2List = _context.TableName.Where(c => c.Column2Title!= null).Select(c => c.Column2Title).ToList();
        List<string> column3List = _context.TableName.Where(c => c.Column3Title!= null).Select(c => c.Column3Title).ToList();
        List<DateTime> postedDateTimeList = _context.TableName.Where(c => c.PostedDateTime != null).Select(c => c.PostedDateTime.Value).ToList();
        List<string> column5List = _context.TableName.Where(c => c.Column5Title!= null).Select(c => c.Column5Title).ToList();

        for (int i = 0; i < tableEntriesCount; i++)
        {
            rows = new string[,] { { column1List[i], column2List[i], column3List[i], postedDateTimeList[i].ToString(), column5List[i] } };

            mainList.Add(new GetTableDetails() { Column1 = rows[0, 0], Column2 = rows[0, 1], Column3 = rows[0, 2], Column4PDT = rows[0, 3], Column5 = rows[0, 4] });
        }

        return mainList;

    }
}

在返回列表之前,我在 GetCardDetails 类的底部尝试了 mainList.OrderByDescending(p => p.PostedDateTime); 的变体。但我不断收到各种错误。

我也曾尝试在获取值之前对数据库表(而不是我的列表)进行排序,但是尽管搜索了谷歌我还是无法弄清楚, Entity Framework 文档似乎比我需要做的更复杂。下面插入 GetCardDetails 类的顶部不会引发错误,但不会执行任何操作,也不会对数据库表应用任何更改。

_context.TableName.OrderByDescending(p => p.PostedDateTime);
_context.SaveChangesAsync();

我也不确定这里的“最佳实践”是什么。在创建列表之前对列表进行排序或对表进行排序。我认为对列表进行排序会更有效率。

谁能帮助我如何按 PostedDateTime 列对列表进行排序?

最佳答案

此代码不执行任何操作:

_context.TableName.OrderByDescending(p => p.PostedDateTime);
_context.SaveChangesAsync();

确实对值进行了排序,但随后忽略了该排序的结果。 (您不会将返回的结果存储在任何内容中。)然后它将更改“保存”到数据库中,但您没有更改任何内容,因此没有任何内容可保存。对一组结果进行排序并不是对数据的更改。

如果GetDetails应按特定顺序返回其列表,按该顺序返回:

return mainList.OrderByDescending(p => p.SomeField).ToList();

或者,如果您想在读取数据库表之前对其进行排序,请将排序后的查询存储在一个变量中并将其用于您的表访问。例如:

var table = _context.TableName.OrderByDescending(p => p.PostedDateTime);

以及您访问表格的任何地方:

List<string> column1List = table.Where(c => c.Column1Title != null).Select(c => c.Column1Title).ToList();
//                         ^--- here

顺便说一句,我强烈怀疑这种整体方法在查询数据时非常效率低下。但我对数据或方法的意图一无所知,所以我真的不能比这更具体了。但一般来说,您可以可能构建一个表达式树来查询数据库,包括您需要的任何排序和投影,并返回一个 IEnumerable<SomeModel>。作为表达式树在需要时进行评估。但随着您继续学习,这些细节可能会发生变化。

关于c# - Entity Framework 排序列表<MyClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70543064/

相关文章:

python - 绕过欧盟同意请求

javascript - 3 条件 - 三元条件链 JavaScript react

rust - 错误处理、map_err 和错误类型转换

python - 如何解析 (1045, "Access denied for user ' Use

r - 从向量中提取字符元素

r - 是否可以将变量从全局环境移动到单独的环境中?

julia - 如何在 Julia 中绘制复数?

c++ - 即使在手动设置显示环境变量后,WSL Ubuntu 仍显示 "Error: Unable

android - Appium 创建 session 失败

haskell - haskell 中有包含字符串和列表的类型吗?