【问题标题】:entity framework, mysql and IQueryable实体框架,mysql 和 IQueryable
【发布时间】:2011-04-10 18:45:56
【问题描述】:

我在 MySQL 中使用实体框架,但无法正确执行查询。我试图有一个点来访问一种对象。 IE。地址。 这就是我在存储库中的内容。

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 及其执行方式的内容。

谢谢。

【问题讨论】:

  • 为什么要投射到Address 的实例中?你不能在GetAddresses 方法中简单地使用return from a in DBContext.addresses select a; 吗?

标签: mysql linq entity-framework linq-to-entities iqueryable


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 2011-05-06
    • 2020-08-12
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多