我正在编写一个MVC 5互联网应用程序,并对使用IQueryable有疑问。
如果我将一组DbSet对象检索为IQueryable,并且我没有引用每个DbSet对象中的某些属性,那么在使用IQueryable时是否会检索这些属性的值?这是使用IQueryable而不是IEnumerable的优势吗?
我正在尝试确定从多个DbSet对象中检索值的最有效方法,其中我没有引用每个DbSet对象中的每个属性。
提前致谢。
修改
在这种情况下怎么样:
如果我的模型如下:
public class TestModel
{
[Key]
public long Id { get; set; }
public string name { get; set; }
public string value { get; set; }
}
我按如下方式检索上述对象的DbSet:
IQueryable<TestModel> testModels = await db.testModels(t => t.name.Equals("Test"));
我遍历上面的IQueryable,检索name
属性,是从数据库中检索到的Id
和value
值吗?
EDIT2
在这种情况下怎么样:
如果我将一些TestModel检索为IQueryable,然后遍历它们,那么调用IQueryable具有相同名称的完全相同的代码,是否对数据库进行了两次交易?
答案 0 :(得分:0)
如果对数据库执行请求,则它将检索指定对象的所有属性。在这种情况下,将填充TestModel
上的所有属性。使用IQueryable
优于IEnumerable
的好处是您可以使用LINQ扩展方法,例如Where
,Select
等,您也可以在LINQ语句中使用DbSet
,即:
from x in dbSetVariable where id == 1 select x
例如,您可以尝试的一件事是:
from x in DbSetVariable select new { newName = x.name }
这将创建一个名为newName
的单个属性的匿名对象,并将使用name
列中的数据填充该对象。这可能会导致请求单个列的查询。如果您想要请求其他单个列,则只需将新属性添加到匿名类型:
from x in DbSetVariable select new { newName = x.name, newValue = x.value }