实体框架,mysql和IQueryable



我使用MySQL的实体框架,我不能得到正确的查询执行。我想要有一个点来访问一个类型的对象。例如地址。这是我的仓库。

public IQueryable<Address> GetAddresses()
        {
            return from a in DBContext.addresses
                   select new Address
                   {
                       Id = a.instance,
                       City = a.city,
                       Country = a.country,
                       Owner = a.owner,
                       PostalCode = a.postcode,
                       Street = a.street
                   };
        }

在服务层,我正在添加一个谓词,该谓词将被添加到IQueryable对象并执行查询

public Data.Address GetAddress(Func<Data.Address, bool> predicate)
        {
            List<Data.Address> items = referenceDataRepository.GetAddresses().Where(predicate).FirstOrDefault();
return items;
        }

一个谓词应该是(x => x. owner = 233)当检查MySQL日志时,我看到正在执行的查询不包括where子句,并且似乎谓词是在返回所有地址后应用的,这是非常昂贵的。

我错过了一些关于IQueryable和它是如何执行的。

谢谢。

这是因为您将谓词定义为Func<Data.Address, bool>,因此必须将其定义为表达式:Expression<Func<Data.Address, bool>>Func将您的Where部分转换为linq对象

相关内容

  • 没有找到相关文章

最新更新