我正在尝试实现一个通用仓库模式,该模式实现了IEnumerable
中通用项的CRUD操作。我遇到了一个问题,即通用地查找可能已经在IEnumerable
中的项。
我需要以编程方式传递哪些属性组成了“键”或不同的记录,然后使用LINQ对定义的属性执行Enumerable.Any()
,这样它就可以查看对象是否已经存在于IEnumerable
中。
下面是我目前的代码:
// Generic Method
public void AddItem(TEntity item)
{
var entities = GetAllItems().ToList(); // Method gets cached IEnumerable<TEntity>
if(true) // Generically see if TEntity is already in the list based of defined properties
{
entities.Add(item);
}
}
// Same function but non-generic
private void AddItem(MyObject object)
{
var objects = GetAllItems().ToList(); //Method gets cached IEnumerable<MyObject>
if(!objects.Any(a=> a.ID == MyObject.ID ))
{
objects.Add(object);
_cache.AddReplaceCache(objects);
}
}
注意:键可以是对象MyObject上的任何属性
2条答案
按热度按时间xxhby3vn1#
You can make your entities inherit from a common interface:
Then you can redefine your method like
Now, if you don't always want to compare via ID, then you can add a predicate to your method:
Then you would use your function as
wwodge7n2#
如果我没理解错的话,你的问题是
TEntity
没有属性ID
。所以让你的实体继承公共接口,比如ID列。