0

我正在编写一个 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

编辑2

在这种情况下怎么办:

如果我将一些 TestModel 作为 IQueryable 检索,然后遍历它们,然后调用 IQueryable 具有相同名称的完全相同的代码,是否对数据库进行了两个事务?

4

1 回答 1

0

如果您对数据库执行请求,那么它将检索指定对象的所有属性。在这种情况下,所有属性TestModel都将被填充。IQueryable使用over的好处IEnumerable是可以使用 LINQ 扩展方法,例如Where,Select等,还可以DbSet在 LINQ 语句中使用 ,即:

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 }
于 2015-03-31T14:30:29.443 回答