使用Linq的Any()
扩展方法将返回不一致的结果。我得到一个通用的“对象引用未设置为对象的实例”。
我尝试获取记录并将其存储在临时列表中,然后在该列表上调用 –为此一组实体,我得到了这个虚假的NullReferenceException。Any()
扩展名,它可以正常工作,但是出于某些原因,
bool result = _Repository.GetAll().Any(p => p.CustomerAccount.Equals(customerAccount)
预期结果应为true或false。相反,我得到了NullReferenceException。
有关其他内容。这是我的GenericRepository类中的一些行
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
private DbContext _Context = null;
private DbSet<T> _Entity = null;
public GenericRepository(DbContext context)
{
_Context = context;
_Entity = _Context.Set<T>();
}
public IEnumerable<T> GetAll()
{
return _Entity.ToList();
}
public T GetById(object id)
{
return _Entity.Find(id);
}
public void Add(T entity)
{
_Entity.Add(entity);
_Context.SaveChanges();
}
public void Update(T entity)
{
_Entity.Attach(entity);
_Context.Entry(entity).State = EntityState.Modified;
_Context.SaveChanges();
}
public void Delete(object id)
{
T existingEntity = _Entity.Find(id);
if(existingEntity != null)
_Entity.Remove(existingEntity);
}
public void Save()
{
_Context.SaveChanges();
}
}
这里是我调用Any扩展并获取NullReferenceException的地方。请注意,我在其他领域使用了相同的表达式,并且可以正常使用!
static GenericRepository<Customer> = new GenericRepository<Customer>(new MyCoolEntities());
public static bool AnyCustomerExist(string customerAccount)
{
return _Repository.GetAll().Any(p => p.CustomerAccount.Equals(customerAccount));
}
更新 您会在评论中看到我和Amy的讨论。看起来有些记录中的CustomerAccount列实际上为NULL。您无法与null比较吗?
但是,如果我将以下代码添加到通用存储库中,然后调用不起作用的同一行并将其替换为AnyRecords而不是Any,为什么下面的代码可以工作?
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
public bool AnyRecords(Expression<Func<T, bool>> expression)
{
return _Entity.Any(expression);
}
...
此有效
static GenericRepository<Customer> = new GenericRepository<Customer>(new MyCoolEntities());
public static bool AnyCustomerExist(string customerAccount)
{
return _Repository.GetAll().AnyRecords(p => p.CustomerAccount.Equals(customerAccount));
}
此无效,为什么?
static GenericRepository<Customer> = new GenericRepository<Customer>(new MyCoolEntities());
public static bool AnyCustomerExist(string customerAccount)
{
return _Repository.GetAll().Any(p => p.CustomerAccount.Equals(customerAccount));
}