我正在构建一个 Web 应用程序,该应用程序在其SQL
数据库中搜索用户输入的查询。一个简单的搜索引擎。
让我们提议我有很多行 - 超过几千行。我想让通话更有效率。
我知道我的电话只需一个*SQL
查询即可。我想知道是否Linq-To-Sql
有这种优化。
我知道它Lazy
用于查询。我现在无法对其进行基准测试,因为我的数据库中没有足够的数据。
foreach(var word in words)
{
var niqquh = number == 666 ? "" : Languages[number];
var S = db.Uploads.Where(w => number == 666 ? true : (w.Language == niqquh));
if(S.Count() > 20)
S = S.Take(20);
S = S.OrderBy(u => (u.Tags.Contains(word) ? 15 : 0) + (u.Name.Contains(word) ? 10 : 0) + (u.Description.Contains(word) ? 5 : 0));
listOfList.Add(S.ToList());
}
正如你在这里看到的,我有一个“幻数” 666
,用来表示“任何语言都可以”。
然后,我只想取前 20 个元素,所以我调用Count()
then Take
。
然后,我根据我的需要对结果进行排序。关键是
,我认为lazy
表达式被评估Count
- 因此它不能被优化为只包含该级别的前 20 行SQL Query
- 但在客户端的 (ASP.NET) 级别。因此,我基本上将整个数据库下载到客户端,这很糟糕。
它是否得到优化,如果没有,我怎样才能以有效的方式做到这一点,即使我必须回到纯SQL
字符串语句?
*每个查询word