-1

这是我的情况。我有 2 个相同类型的列表。想象一下这样的名字。FullList 和 ElementsRemoved。因此,为了避免数据库往返,每当我从完整列表中删除一个元素时,我都会添加到 ElementsRemoved 列表中,以防用户后悔,这样他就可以恢复删除。

我正在考虑在 ElementsRemoved 内部循环,以将它们再次插入到最初被删除的 FullList 中。

有任何方法可以像使用列表方法一样简单。

就像是

FullList.Insert, Add, ..... (x => 

为了减少行代码并进行优化?

4

4 回答 4

2

与其从数据库中删除项目,不如考虑在表中使用标志。

例如考虑这个实体表(用 TSQL 编写):

CREATE TABLE Entity
(
    Id INT IDENTITY PRIMARY KEY
   ,Name NVARCHAR(20) NOT NULL
   ,IsDelete BIT NOT NULL DEFAULT 0
);

这样,您可以IsDelete在用户删除实体时设置该位,以防止数据丢失。可以在下班时间对工作进行数据修剪。

这将导致只需要一个列表而不是跟踪两个列表。

public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsDelete { get; set; }
}

public static void UndoDelete(IEnumerable<Entity> fullList, int[] removedIds)
{
    foreach(var entity in fullList.Where(e => removedIds.Contains(e.Id)))
    {
        entity.IsDelete = false;
    }
}

如果您无法修改您的应用程序。

您可以简单地重新添加实体。

List(T).AddRange

var entitiesToAdd = new[] { 2, 3, 4 };

var entitiesToInsert = ElementsRemoved.Where(e => entitiesToAdd.Contains(e.Id)); 
FullList.AddRange(entitiesToInsert);
于 2013-07-17T16:52:59.227 回答
1

假设您有一个具有唯一标识它的字段 id 的元素。

class Element{public int id;}

在这种情况下,您可以这样做

FullList.Add(ElementsRemoved.FirstOrDefault(e=>e.id==id));

如果您想添加所有元素,请使用 AddRange

FullList.AddRange(ElementsRemoved);
于 2013-07-17T16:53:18.010 回答
1

在您的前端创建一个包含 bool 和您的对象的类:

public class DelPair<T>{
   public bool IsDeleted{get;set;}
   public T Item{get;set;}
}

现在不再使用对象列表,而是在删除时使用列表DelPair<YourClass>和设置。IsDeleted=true

这种模式还允许您跟踪其他事情,例如IsModified是否涉及到。

根据 OP 评论,他正在使用 ENTITY 类并需要它这样运行:

一种选择是让您的 DelPair 类继承 ENTITY。另一个可能是放置隐式转换运算符:

...
   // not exactly sure about the signature, trial/error should do :)
   public static implicit operator T(DelPair<T> pair) 
   {
      return pair.Item;
   }
于 2013-07-17T17:00:39.957 回答
0

您可以使用AddRange方法

FullList.AddRange(ElementsRemoved);

但考虑这样做

public class YourClass
{ 
     public string AnyValue{get;set;}
     public bool IsDeleted{get;set;}
}

你有这样的列表 List <YourClass> FullList。现在,每当用户删除您刚刚设置的任何项目时

IsDeleted = true 

被删除的项目。这将帮助您只保留一个列表并从列表中添加删除

于 2013-07-17T16:51:34.737 回答