gpt4 book ai didi

c# - 未在 C# 中设置对象属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:18 26 4
gpt4 key购买 nike

这是我遇到的一个奇怪的问题,我有以下声明:

IEnumerable<CategoryListViewModel> categoryViewModels = categoryRepository.GetAllCategoryViewModels();

这正确地填充了一个元素。

categoryViewModels.Where(cvm => cvm.CategoryId == localId).Single().Selected = true;

然而,没有任何更新,选择仍然是错误的。我可以验证 CategoryId 和 localId 是否相等,如果我突破:

var something = categoryViewModels.Where(cvm => cvm.CategoryId == localId).Single()

它正确地返回了一个 viewModel。事实上,如果我进去并将局部变量“something”设置为 Selected = false。它将正确更新局部变量。

我是否漏掉了一些明显的东西?

编辑:

public class CategoryListViewModel
{
public Guid CategoryId { get; set; }

public string CategoryName { get; set; }

public bool Selected { get; set; }
}

最佳答案

我认为您的问题可能是 categoryViewModels 实际上是一个 IQueryable - 因此当您枚举它时,它会调用数据库并从数据库中选择一个列表。

这意味着您创建一个列表,然后为该列表中的一个项目更改selected

但是...下次您枚举 categoryViewModels 时,这会导致另一个 SELECT 发生 - 并将一个新列表提取到内存中。

要解决此问题,您可以尝试 ToList():

IEnumerable<CategoryViewModel> categoryViewModels = categoryRepository.GetAllCategoryViewModels().ToList();

或者您可以用其他方式重新组织您的代码,以确保只执行一个基础查询。

关于c# - 未在 C# 中设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794527/

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