gpt4 book ai didi

C# : AsQueryable() vs AsQueryable()

转载 作者:行者123 更新时间:2023-11-30 19:16:36 25 4
gpt4 key购买 nike

我在使用 AsQueryable 时遇到问题,我发现了一些示例,其中此扩展需要强制转换,即 AsQueryable,在某些示例中,直接转换为 AsQueryable()。我用 Stopwatch 检查了这两种情况,并得出了几乎相同的多次调查结果。让我们举个例子:

//With AsQueryable()
var studentId = dbContext.Students.AsQueryable().Where(a=>a.Name == "Abc").Select(a=>a.Id).FirstOrDefault();

//With AsQueryable<Student>()
var studentId = dbContext.Students.AsQueryable<Student>().Where(a=>a.Name == "Abc").Select(a=>a.Id).FirstOrDefault();

使用 AsQueryable() 有什么区别?和 AsQueryable<type>()哪个有效?

最佳答案

当您调用 AsQueryable() 时未指定泛型参数类型,编译器会从您调用它的对象中推断出它。

var source = new List<int>();
var queryable = source.AsQueryable(); // returns IQueryable<int>

相当于

var queryable = source.AsQueryable<int>();

更新

回答评论中提出的问题:

Then what is the use for having two different way? Is there any particular situation when we have to use only one of it?

是的,你不能在使用匿名类型时显式指定类型参数,因为你没有类名:

source.Select((x,i) => new { Value = x, Index = i }).AsQueryable();

这正是引入类型推断的原因:让您在使用匿名类型时无需指定类型参数即可调用泛型方法。但是因为它不仅适用于匿名类型,而且可以节省您不必要的输入,所以尽可能依赖类型推断是很常见的。这就是为什么大多数时候您可能会看到没有类型参数的 AsQueryable()

关于C# : AsQueryable() vs AsQueryable<type>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com