我不确定我明白IQueryable
到底是什么。
我知道它并没有让我获得所有实体并将约束部分放在内存中,而是将其作为发送到数据库的命令的一部分执行。
如果我弄错了,请纠正我并告诉我,为什么我的存储库函数会返回IQueryable
而不是简单的List
?
答案 0 :(得分:16)
IQueryable
实际上并不是实体的集合,而是描述了如何获取该集合。在您评估数据之前,不会从源中检索数据,只需将其转换为IEnumerable
或类似内容。
从存储库返回IQueryable
的优点是,您的调用代码可以在查询进入数据库之前指定其他.Where
子句。如果您返回IEnumerable
,您的代码将从数据库中检索一个表的所有值,然后在内存中执行过滤,这是低效的。
答案 1 :(得分:6)
IQueryable和int get_function(menu_t get_input)
{
int i;
double rad, result;
switch ( get_input )
{
case Sin:
i = 0;
for (i = 0; i > loop_limit; i += step_size)
{
rad = PI * (i /180);
result = sin(rad);
printf("\tsin(%d) = %.4lf\n", i, result);
printf("\n");
}
break;
case Cos:
for(i = 0; i > loop_limit; i += step_size)
{
rad = PI * (i /180);
result = cos(rad);
printf("\tcos(%d) = %.4lf\n", i, result);
printf("\n");
}
break;
case Tan:
for(i = 0; i > loop_limit; i += step_size)
{
if(i <= 75)
{
rad = PI * (i /180);
result = tan(rad);
printf("\ttan(%d) = %.4lf\n", i, result);
printf("\n");
}
else
{
printf("\ttan(%d) is UNDEFINED", i);
}
}
break;
case QUIT:
printf("You chose QUIT. Thank you, come again!\n");
break;
}
return(0);
}
是封装LINQ表达式的抽象;然后,这些表达式由LINQ提供程序(如实体框架使用的表达式)使用,将这些表达式转换为SQL,然后将其发送到数据库。不同的LINQ提供程序以不同的方式解释LINQ表达式,例如,MongoDB将这些表达式转换为JSON查询。
IQueryable<T>
仅在&#34;终端&#34;调用方法,例如IQueryable
,ToList()
,ToArray()
,Single()
,SingleOrDefault()
,First()
,FirstOrDefault()
, Count()
等。这是提供商快速进入并进行翻译的时间。
Microsoft包含一个LINQ提供程序,它不对任何内容进行转换,但在内存中运行。这是通过调用扩展方法Any()
将IEnumerable<T>
转换为IQueryable<T>
时使用的方法。