我有像这样的对象列表
List<Product> _products;
然后我得到productId输入并在此列表中搜索</ p>
var target = _peoducts.Where(o => o.productid == input).FirstOrDefault();
我的问题是
如果此列表包含100个产品(productId从1到100)和一个
输入我得到productId = 100.这意味着此方法必须循环100
时间吧? (如果我在查询中ORDER BY productId ASC
在使用此方法和使用where子句的数据库查询之间
这个WHERE productId = @param
谢谢。
答案 0 :(得分:1)
没有。如果存在具有键productId
的索引,则会找到具有O(log n)操作的正确行
只需实施这两种方法并花点时间。 (提示:使用StopWatch()
类)
<小时/> 的修改
要获得完整的性能,您应该不创建一个中间(未排序)List<T>
,但将所有逻辑放在一个在SQL Server上运行的LINQ查询中。
答案 1 :(得分:1)
@可能有助于得到你的答案。
答案 2 :(得分:1)
如果您在Where
上执行List<Product>
,则:
另一方面,如果您使用了连接到数据库表的IQueryable<Product>
,那么:
Where
时,您仍然无法阅读任何内容FirstOrDefault
时,构造一个sql查询来查找你需要的那一行。给定表上的正确索引,这将非常快。