我正在從資料庫獲取行串列(我將其傳回控制器,然后使用 Razor 語法在視圖中進行處理),但我無法按特定的資料庫列對串列進行排序。
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;
}
}
在回傳串列之前,我已經嘗試mainList.OrderByDescending(p => p.PostedDateTime);了GetCardDetails類底部的變體。但我不斷收到各種錯誤。
我還嘗試在獲取值之前對 DB 表(而不是我的串列)進行排序,但是盡管在 Google 上進行了搜索,但我無法弄清楚這一點,物體框架檔案似乎比我需要做的更復雜。下面插入到GetCardDetails類的頂部不會引發錯誤,但不會執行任何操作并且不會對資料庫表應用任何更改。
_context.TableName.OrderByDescending(p => p.PostedDateTime);
_context.SaveChangesAsync();
我也不確定這里的“最佳實踐”是什么。在創建串列之前對串列進行排序或對表格進行排序。我認為對串列進行排序會更有效。
任何人都可以幫助我如何按 PostedDateTime 列對串列進行排序嗎?
uj5u.com熱心網友回復:
此代碼不執行任何操作:
_context.TableName.OrderByDescending(p => p.PostedDateTime);
_context.SaveChangesAsync();
它確實對值進行了排序,但隨后會忽略該排序的結果。(您不將回傳的結果存盤在任何內容中。)然后它“保存”對資料庫的更改,但您沒有更改任何內容,因此沒有任何內容可保存。對一組結果進行排序并不是對資料的更改。
如果GetDetails應該按特定順序回傳其串列,請按該順序回傳:
return mainList.OrderByDescending(p => p.SomeField).ToList();
或者,如果您想在讀取之前對 DB 表進行排序,請將已排序的查詢存盤在一個變數中,并將其用于您的表訪問。例如:
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>需要時為運算式樹進行評估。但是這些細節可能會隨著您繼續學習而發展。
uj5u.com熱心網友回復:
- 首先將您的模型與您的查詢類分開。
- 然后在視圖模型中執行 Select 操作,如下面的代碼。
- 另外,這真的是“詳細資訊”查詢嗎?也許您應該將其重命名為“Index”,因為它正在回傳一個串列。
- 您可能希望在視圖模型中更改
Column4PDT為 aDateTime。
代碼:
public class TableDetailsViewModel
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public DateTime Column4PDT { get; set; }
public string Column5 { get; set; }
}
public class TableDetailsQuery
{
private readonly ApplicationDbContext _context;
public TableDetailsQuery(ApplicationDbContext context)
{
_context = context;
}
public List<TableDetailsViewModel> GetDetails()
{
var viewModel = _context.TableName
.Select(x => new TableDetailsViewModel {
Column1 = x.Column1Title,
Column2 = x.Column2Title,
Column3 = x.Column3Title,
Column4PDT = x.PostedDateTime,
Column5 = x.Column5Title,
})
.OrderByDescending(p => p.PostedDateTime)
.ToList();
return viewModel;
}
}
uj5u.com熱心網友回復:
你必須這樣做,
mainList.OrderByDescending(p => p.Column4PDT).ToList();因為我記得 orderbydescending 回傳一個 ienumerator,另外你的班級沒有你想在你的帖子中排序的變數
目前無法檢查它,但它應該可以作業
順便提一句。你在哪里定義行的型別(字串[,])
rows = new string[,]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399268.html
上一篇:獲取R中串列串列的列
