【发布时间】:2010-05-22 10:56:54
【问题描述】:
我有一个 LINQ 查询,可以在多个列上搜索多个关键字。目的是用户可以搜索多个关键字,它将在我的Media 实体中的每个属性上搜索关键字。这是一个简化的例子:
var result = repository.GetAll<Media>().Where(x =>
x.Title.Contains("Apples") || x.Description.Contains("Apples") || x.Tags.Contains("Apples") ||
x.Title.Contains("Oranges") || x.Description.Contains("Oranges") || x.Tags.Contains("Oranges") ||
x.Title.Contains("Pears") || x.Description.Contains("Pears") || x.Tags.Contains("Pears")
);
换句话说,我想在Title、Description 和Tags 列上搜索关键字Apples、Oranges 和Pears。
输出的 SQL 如下所示:
SELECT *
FROM Media this_
WHERE ((((((((
this_.Title like '%Apples%'
or this_.Description like '%Apples%')
or this_.Tags like '%Apples%')
or this_.Title like '%Oranges%')
or this_.Description like '%Oranges%')
or this_.Tags like '%Oranges%')
or this_.Title like '%Pears%')
or this_.Description like '%Pears%')
or this_.Tags like '%Pears%')
在这种情况下,这是最优化的 SQL 吗?如果不是,我如何重写 LINQ 查询以创建最佳 SQL 语句?我使用 SQLite 进行测试,使用 SQL Server 进行实际部署。
【问题讨论】:
标签: c# sql linq nhibernate