我有一個資料庫表Table 1,我需要在其中過濾Grade Level包含非不同或重復值的特定列,并且我試圖過濾該列的結果以僅回傳一次或單個,其余的將顯示為空。
我正在使用 Entity Framework Core 來使用下面的代碼實作結果,但它會回傳一個不同的行結果。
我需要實作的是,如果您參考我的資料庫表,即表 1。您可以在 column 下看到它Grade Level;它有重復的值。我想將表 1 中的資料回傳到 UI 中的表中,Table 2如下所示。
簡而言之,我不想顯示該列 ( Grade Level) 中的重復值,而是重復值應該為空,但仍會顯示該行。


這是我目前使用的代碼,它回傳不同的行,但與表 2 中的資料不同。
var teachingPersonnel = new List<TeachingViewModel>();
var teachingPersonnel2 = context.TeachingPersonnel
.AsNoTracking()
.Where(x => x.School_Id == School_Id)
.Select(x => new TeachingViewModel
{
Id = x.Id,
School_Id = x.School_Id,
OrderId = x.OrderId,
Grade_Level = x.Grade_Level,
Name = x.Name,
Position = x.Position,
})
.OrderBy(x => x.OrderId);
teachingPersonnel = teachingPersonnel2.AsNoTracking()
.Select(p => p.Grade_Level)
.Distinct()
.Select(id => teachingPersonnel2.OrderBy(p => p.OrderId)
.FirstOrDefault(p => p.Grade_Level == id))
.OrderBy(x => x.OrderId)
.ToList();
return teachingPersonnel;
如何更新我的代碼以回傳類似于表 2 的結果?
這有可能實作嗎?謝謝
uj5u.com熱心網友回復:
大概你的用戶界面是這樣的:
foreach(var t in GetTeachingPersonnel()){
...
Console.Write(t.Grade);
...
}
讓它像這樣:
var lastGrade = null;
foreach(var t in GetTeachingPersonnel()){
...
if(lastGrade != t.Grade){
Console.WriteLine(t.Grade);
lastGrade = t.Grade;
}
...
}
這樣,如果該行的成績與最后一行不同,則列印,否則不列印。這樣您就不必破壞“獲取資料”方法 - 在其他地方呼叫該方法,您可能需要該行來包含成績資訊;這更像是一個“行跨度”/資料表示型別要求,應該是 ui 的職權范圍
如果您迫切希望資料層執行此操作,您可以采用類似的方法;foreach 您創建的串列,如果此成績與上一個成績相同,則將此成績設為空/空(并更新 lastGrade)
var lastGrade = null;
foreach(var t in teachingPersonnel){
if(lastGrade == t.Grade){
t.Grade = "";
lastGrade = t.Grade;
}
}
uj5u.com熱心網友回復:
對于那些正在尋找與這種情況相同的輸出結果的人。我只是錯過了 for 回圈中的過濾條件。這是我更新的代碼,它解決了我以前的問題。 代碼
string curItem1 = null;
string curItem2 = null;
using (var context = new SchoolsContext(options))
{
var teachingPersonnel = new List<TeachingViewModel>();
var teachingPersonnel2 = context.TeachingPersonnel.AsNoTracking().Where(x => x.School_Id == School_Id)
.Select(x => new TeachingViewModel
{
Id = x.Id,
School_Id = x.School_Id,
OrderId = x.OrderId,
Grade_Level = x.Grade_Level,
Name = x.Name,
Position = x.Position,
}).OrderBy(x => x.OrderId).ToList();
for (int item = 0; item < teachingPersonnel2.Count(); item )
{
curItem1 = teachingPersonnel2[item].Grade_Level;
if (curItem1 != curItem2)
{
curItem2 = teachingPersonnel2[item].Grade_Level;
teachingPersonnel.Add(new TeachingViewModel
{
Id = teachingPersonnel2[item].Id,
School_Id = teachingPersonnel2[item].School_Id,
OrderId = teachingPersonnel2[item].OrderId,
Grade_Level = teachingPersonnel2[item].Grade_Level,
Name = teachingPersonnel2[item].Name,
Position = teachingPersonnel2[item].Position,
});
}
else
{
teachingPersonnel.Add(new TeachingViewModel
{
Id = teachingPersonnel2[item].Id,
School_Id = teachingPersonnel2[item].School_Id,
OrderId = teachingPersonnel2[item].OrderId,
Grade_Level = string.Empty,
Name = teachingPersonnel2[item].Name,
Position = teachingPersonnel2[item].Position,
});
}
}
return teachingPersonnel;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428916.html
