List.Add()在C#中不起作用-吸气剂和吸气剂问题? - c#

我有这个属性:

public virtual List<FieldImage> Images { get; set; }

如果我去获取具有此属性的类,则使用这样的实体从数据库中获取...

Field field = this.unitOfWork.FieldRepository.GetByID(Convert.ToInt32(fieldID));

然后将图像添加到数组:

FieldImage fieldImage = new FieldImage()
{
    CreatedAt = dateNow,
    UpdatedAt = dateNow,
    CreatedBy = unitOfWork.UserRepository.GetByID(User.Identity.GetUserId()),
    File = file,
    Field = field
};

field.Images.Add(fieldImage);

然后像这样保存上下文:

this.context.SaveChanges();

一切都还好。 images数组被填满,并且保存到数据库的效果很好。

如果我将属性更改为此:

private List<FieldImage> _images;
public virtual List<FieldImage> Images
{
    get
    {
        return 
            this._images != null ? 
            this._images.Where(x => x.DeletedAt == null).ToList() : 
            new List<FieldImage>();
    }
    set
    {
        this._images = value;
    }
}

现在执行我以前熟悉的确切操作,即field.Images保持为空,但不会发生任何错误...并且当然不会发生数据库保存。

我究竟做错了什么?

编辑:

这行得通,谢谢...看来我的if逻辑有问题:

    private List<FieldImage> _images;
    public virtual List<FieldImage> Images
    {
        get
        {
            if (this._images == null)
            {
                this._images = new List<FieldImage>();
            }

            return this._images;
        }
        set
        {
            this._images = value.Where( x => x.DeletedAt == null ).ToList();
        }
    }

参考方案

您的获取者总是返回一个新列表。您打电话的时候

field.Images.Add(fieldImage);

您将获得一个新创建的列表并向其中添加一个项目,但是与源数据没有任何关系。

一些选项:

添加Add方法,将项目添加到原始列表
在加载数据而不是获取数据时过滤项目
询问属性时,将字段值(_images)设置为过滤列表

Python list.insert()多索引/列表列表 - python

出于性能原因,我想使用Python列表insert()方法。我将说明原因:我的最终列表是31k * 31k矩阵:w=31*10**3 h=31*10**3 distance_matrix = [[0 for x in range(w)] for y in range(h)] 我打算一次更新一次矩阵:for i in range(len(index)): fo…

list.AddRange无法隐式转换类型“ void” - c#

namespace SubscriptionWebsite.PlaceHolders { public class TreeData { public int ID { get; set; } public int? ParentLocationID { get; set; } public string name { get; set; } public …

if语句循环内发生短路 - python

我正在编写一个def,以将用户定义的数字评估到集合列表中。 def应该检查长度并向用户输出前十个的打印列表。不会显示打印的对帐单。我认为这是短传。一世# Function to check the length of the list def Check_Length(): Number_List_A =[] if len(Number_List_A) &g…

如何克隆或复制列表? - python

在Python中克隆或复制列表有哪些选项?使用new_list = my_list时,对new_list的任何修改每次都会更改my_list。为什么是这样? python参考方案 使用new_list = my_list,实际上没有两个列表。分配只是将引用复制到列表,而不是实际列表,因此new_list和my_list都在分配后引用同一列表。要实际复制列表,…

与在Java中分配数组与分配链表相比,要使用多少内存? - java

我的猜测是,存储在数组中的每个值都有32位/ 64位字(取决于CPU)。因此它将是数组大小X 32位/ 64位。对于链表,存储指向下一个元素的引用将是链接列表的两倍。因此它将是2 *数组大小X 32位/ 64位。这是正确的,我有什么遗漏吗? java大神给出的解决方案 多得多。链表中的每个元素都有:指向下一个元素的指针,指向上一个元素的指针,指向项目值的指针…