试图插入/排序的清单的基础上"订单"的价值

0

的问题

我创造一个文件应用程序中,允许人们在我的业务访问文档有关的某些软件。 有了这个,我有一个网页,其中的任何管理员可以管理的类别和用户。 为此,我希望管理能够改变一个类别,其中它应该显示的对我的导航菜单. 现在,第一部分,它应该正确顺序的分类基于以内导航菜单的工作。 但是当我试图编辑现有的分类和它们的顺序号码,订单就不会更新因此,看到这样的例子:

这是在编辑之前已有的类别,这些类别是新加入/成 New categories

这是之后编辑的类别,"反应"应为2,API将为0,并测试会可以1 Edited categories

正如你可以看到,以没有意义了。 显然,不应该允许超过1的任何顺序。

现在,问题很可能是来自这个代码。

CategoryService.cs

public async Task<List<Category>> InsertCategory(Category category)
        {
            await GetCategories();
            for (int i = 0; i < Categories.Where(c => c.Order >= category.Order).Count(); i++)
            {
                Categories[i].Order++;

                if (Categories[i].Order == category.Order)
                {
                    Categories[i].Order--;
                    break;
                }
            }

            await categoryRepository.InsertAsync(Categories);
            EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);
            return Categories;
        }

顺序的代码如下:

CategoryDialog.剃须刀

private async void SaveCategory(Category category)
    {
        if(!string.IsNullOrEmpty(category.Name))
        {
            await categoryService.SaveCategory(category);
            Snackbar.Add("Category " + category.Name + " added", Severity.Success);
            MudDialog.Close(DialogResult.Ok(category.Id));       
        }
        else
        {
            Snackbar.Add("Please enter a category name.", Severity.Warning);
        }
    }

上述被称为代码后按下按钮。 这传递一个类别与一个特定的顺序号,此数获得通过从一个简单的下拉菜单。

SaveCategory 功能看起来是这样的:

CategorySerice.cs

public async Task<Category> SaveCategory(Category category)
        {
            await InsertCategory(category);

            if (categoryRepository.GetByIdAsync(category.Id) == null)
            {
                await categoryRepository.AddAsync(category);
            }
            else
            {
                await categoryRepository.SaveAsync(category);
            }

            EventHelper.NotifyCategoryListChanged(Categories, EventArgs.Empty);

            return category;
        }

这种功能的电话有问题的功能之前,实际上节省/加入的任何数据库。 因此,它可以为新增加或编辑的类别。

在此之后,事件得到解雇通知我的导航菜单,已经作出的改变,应该重新呈现,以显示这一点。 这没有问题。

但我想不通我怎么会有适当的订单被列当我改变它们。 快速提醒,这一功能不当编辑现有的类别。 如果我想添加一个新的类别,例如在以2. 它不适当地移一切都没有问题。

任何帮助是受欢迎的!

.net c# entity-framework
2021-11-23 11:52:48
1

最好的答案

0

因此,如果用户试图做的第二个说了2,这会减少为了数的一个原来所在之处,怎么样呢?

你的循环逻辑不能支持,因为你的循环,增加的时候,它发生你已经通过以前这样你会得到一个双1据推测,之后。

我认为你会得到你想要的如果你改变你的循环运行下喜欢你的推动下,虽然明显地你会需要支持以零下很快,并不是始终支持

为:

for (int i = Categories.Count() -1; i >-1; i--)
{
    if (Categories[i].Order <= category.Order)
    {
        Categories[i].Order = Categories[i].Order--;
    }
}

但是一切有意义和没有运行,在此我建议推动了起来,而不是的,因为正高的数字并没有同样的问题在角落的这么说

或替代:

for (int i = 0; i < Categories.Count(); i++)
{
    if(Categories[i].Order < category.Order) continue;
    Categories[i].Order = Categories[i].Order++;
}

最终也除非您的执行是不同于我的想象,你会希望实际上增加新的类别,并不是所有的人(不包括休的新)再次

--FROM: await categoryRepository.InsertAsync(Categories);
--TO:
await categoryRepository.InsertAsync(category);
2021-11-23 12:22:15

我已经试过了第2解决方案,但是这造成了剩余在0时创造新的类别。 我真的不知道什么最后的解决方案。 但是,如果它帮助"类别",是一个列表里 CategoryService.cs 这是一个单一来源的真相,时 GetCategories 被称,它抓住了新信息的数据库。
Rowin

@Rowin的最后意味着什么你想要插入新的类别并没有整个类别列表,我并没有包括任何关于实际保存变了,对吗? 这不是你的问题你已经掌握。 这样的因为我还相信了你的类别参数已经确定,由于你的比较对它和我们不看看它是如何设定的。 你有没有设置它之前已经叫SaveCategory然后呢? 因为我们不manupulate参数类别但是简单地增加它是唯一的可能性是它总是0?
T. Nielsen

值了来一下拉菜单,其可以选择从0到目前数量的分类,或当创建一个,0到目前数量的类别+1. 它正在通过对SaveCategory. 我想现在要做的,是建立一个"新的"清单。 这里的一切是转移到作为新的类别。 在这之后的保存和实际上加入到该数据库。 这一工作现在创建新的类别,但在编辑现有的文件,这并不移地保持在正确的顺序。
Rowin

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................