用于按实现IDbSet接口的类的Guid类型进行搜索的通用Find方法



我正在通过实现IDbSet接口来实现FakeDataSet类。作为实现这个接口的一部分,我必须实现Find方法。我的所有实体类都有一个Guid类型Id列。我正在尝试为这个FakeDbSet类实现Find方法,但很难用通用的方式编写它。下面是我写这种方法的尝试。

public class FakeDataSet<T> : IDbSet<T> where T: class, new()  
{  
//  Other methods for implementing  IDbSet interface
public T Find(params object[] keyValues)  
{  
var keyValue = (Guid)keyValues.FirstOrDefault();
return this.SingleOrDefault(m => m.Id == keyValue);  // How can I write this
}
}

由于它不知道Id是Guid类型,我在m.Id调用上遇到编译错误。

'T'不包含'Id'的定义,也没有扩展方法可以找到接受第一个类型为"T"的参数的"Id"(您是缺少using指令或程序集引用?)

关于如何实现这一点有什么想法吗?

这样的东西可以给你一个想法:

public virtual T Find(params object[] keyValues)
{
if (keyValues.Length != _keyProperties.Count)
throw new ArgumentException("Incorrect number of keys passed to find method");
IQueryable<T> keyQuery = this.AsQueryable<T>();
for (int i = 0; i < keyValues.Length; i++)
{
var x = i; // nested linq
keyQuery = keyQuery.
Where(entity => _keyProperties[x].GetValue(entity, null).Equals(keyValues[x]));
}
return keyQuery.SingleOrDefault();
}

来源:通用存储库:伪造IDbSet实现更新(查找方法和身份密钥)

最新更新