【发布时间】: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