gpt4 book ai didi

c# - Entity Framework 排序列表

转载 作者:行者123 更新时间:2023-12-05 09:29:39 27 4
gpt4 key购买 nike

我正在从数据库中获取行列表(我将其传递回我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com