重新排序项目列表并在数据库中进行更新



我试图使用LINQ对列表进行重新排序,但似乎很困惑。我想这是一件简单的事情,但我似乎无法理解

我使用blazor进行了以下设置:

@foreach (var question in Questions)
{
<div>
<p @onclick="@(() => MoveQuestionUp(question))">Move up</p>
<p @onclick="@(() => MoveQuestionDown(question))">Move down</p>
</div>
}

因此,非常基本的HTML只需单击即可重新排序,并在列表中上下移动问题。

public void MoveQuestionUp(Question question)
{
return MoveQuestion(question, "up");  
}
public void MoveQuestionDown(Question question)
{
return MoveQuestion(question, "down");  
}
public async Task MoveQuestion(Question question, string direction)
{
var currentOrder = question.Order;
var updatedOrder = direction == "up" ? currentOrder++ : currentOrder--;
// I'm unsure what to do at this point
// ...
await QuestionService.UpdateQuestionOrder(Questions);
}

我明白,我没有在这里尝试过任何事情,因为我完全不知道下一步该做什么。我理解这个概念。

编辑:

在对评论进行反馈后,我更新了MoveQuestion方法,但我认为它不是最佳的,所以我想了解一下它的意见。

public async Task MoveQuestion(Question question, string direction)
{
var questionIndex = Questions.FindIndex(q => q.Id == question.Id);

if (questionIndex == 0 && direction="up")
{
return;
}
var targetQuestionIndex = direction == "up" ? questionIndex - 1 : questionIndex + 1;
var targetQuestion = Form.Questions[targetIndex];
(targetQuestion.Order, question.Order) = (question.Order, targetQuestion.Order);
await QuestionService.SaveChanges();
Questions = Questions.OrderBy(q => q.Order).ToList();
StateHasChanged();
}
public async Task MoveQuestionUp(Question question)
{
var questionIndex = Questions.FindIndex(q => q.Id == question.Id);
if(questionIndex == 0)
{
return;
}

var previousQuestion = Questions[questionIndex - 1];

await SwapOrder(question, previousQuestion);
}
public async Task MoveQuestionDown(Question question)
{
var questionIndex = Questions.FindIndex(q => q.Id == question.Id);
if(questionIndex == Questions.Count - 1) // last question
{
return;
}
var nextQuestion = Questions[questionIndex + 1];
await SwapOrder(question, nextQuestion)
}
private async Task SwapOrder(Question a, Question b)
{
var temp = a.Order;
a.Order = b.Order;
b.Order = temp;

await QuestionService.SaveChanges();
Questions = Questions.OrderBy(q => q.Order).ToList();
}

最新更新