使用带有实体的Linq的Any()导致结果不一致

时间:2019-07-30 19:31:51

标签: c# asp.net-web-api2 azure-sql-database entity-framework-6.2

使用Linq的Any()扩展方法将返回不一致的结果。我得到一个通用的“对象引用未设置为对象的实例”。

我尝试获取记录并将其存储在临时列表中,然后在该列表上调用Any()扩展名,它可以正常工作,但是出于某些原因, –为此一组实体,我得到了这个虚假的NullReferenceException。

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));
}

0 个答案:

没有答案