逐步创建查询,我应该使用IEnumerable还是IQueryable?
逐步创建查询,我应该使用IEnumerable还是IQueryable?
我正在使用Entity Framework 6和vb.net 2017。有两种情况下我需要逐步创建查询:\n
query = (From t in context.myobj1s select t) if (condition1) then query = query.where(Function(t2) t2.value1 < 5) If (condition2) then query = query.where(Function(t2) t2.value2 > 120) query.tolist
\n和\n
query = (From t in context.myobj1s.Local select t) if (condition1) then query = query.where(Function(t2) t2.value1 < 5) If (condition2) then query = query.where(Function(t2) t2.value2 > 120) Mybindingsource.Datasource = query.tolist
\n我的问题是:在每种情况下,我应该如何声明query:\n
Dim query as IEnumerable(of myobj1)
\n还是\n
Dim query as IQueryable(of myobj1)
问题的出现原因是,在使用数据库相关的方法时,应该使用IQueryable而不是IEnumerable。这是因为IQueryable可以使用数据库特定的方法,例如Include(...)方法就是基于IQueryable实现的。而且,IQueryable是从IEnumerable扩展而来的。
解决方法是将查询从IEnumerable转换为IQueryable。可以使用AsQueryable()方法将IEnumerable转换为IQueryable。下面是一个示例代码:
IEnumerable<myobj1> myObjects = GetMyObjects(); // 获取数据集合
IQueryable<myobj1> queryableObjects = myObjects.AsQueryable(); // 将IEnumerable转换为IQueryable
这样,就可以在查询中使用数据库相关的方法了。