逐步创建查询,我应该使用IEnumerable还是IQueryable?

17 浏览
0 Comments

逐步创建查询,我应该使用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)

0
0 Comments

问题的出现原因是,在使用数据库相关的方法时,应该使用IQueryable而不是IEnumerable。这是因为IQueryable可以使用数据库特定的方法,例如Include(...)方法就是基于IQueryable实现的。而且,IQueryable是从IEnumerable扩展而来的。

解决方法是将查询从IEnumerable转换为IQueryable。可以使用AsQueryable()方法将IEnumerable转换为IQueryable。下面是一个示例代码:

IEnumerable<myobj1> myObjects = GetMyObjects(); // 获取数据集合

IQueryable<myobj1> queryableObjects = myObjects.AsQueryable(); // 将IEnumerable转换为IQueryable

这样,就可以在查询中使用数据库相关的方法了。

0