实体框架,mysql和IQueryable

时间:2011-04-10 18:45:56

标签: mysql linq entity-framework linq-to-entities 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 =&gt; x.Owner = 233) 检查MySQL日志时,我看到正在执行的查询不包含where子句,似乎在返回所有地址后应用了谓词,这非常昂贵。

我是否遗漏了有关IQueryable及其执行方式的内容。

感谢。

1 个答案:

答案 0 :(得分:3)

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