冗长的LINQ查询破坏了SQLite解析器-简化吗?
|
我正在使用C#和LINQ对搜索SQLite数据库进行编程。
搜索的想法是,您可以提供一个或多个关键字,任何关键字都必须包含在多个列条目中的任何一个中,才能将该行添加到结果中。
该实现由几个linq查询组成,所有linq查询都通过联合放在一起。这样必须考虑更多的关键字和列,从而导致更复杂的查询。这可能会导致产生SQL代码,这对于SQLite解析器来说是很长的。
以下是一些示例代码来说明:
IQueryable<Reference> query = null;
if (searchAuthor)
foreach (string w in words)
{
string word = w;
var result = from r in _dbConnection.GetTable<Reference>()
where r.ReferenceAuthor.Any(a => a.Person.LastName.Contains(word) || a.Person.FirstName.Contains(word))
orderby r.Title
select r;
query = query == null ? result : query.Union(result);
}
if (searchTitle)
foreach (string word in words)
{
var result = from r in _dbConnection.GetTable<Reference>()
where r.Title.Contains(word)
orderby r.Title
select r;
query = query == null ? result : query.Union(result);
}
//...
有没有一种方法可以以更紧凑的SQL形式构造查询?
我试图通过在每个循环后在查询上调用GetEnumerator()来强制创建较小的SQL语句。但是显然Union()不会对数据进行操作,而是对底层的LINQ / SQL语句进行操作,因此无论如何我都生成了长语句。
我现在唯一想到的解决方案是,在每个“子查询”之后真正地收集数据,并对实际数据进行合并,而不是在语句中进行合并。有任何想法吗?
没有找到相关结果
已邀请:
1 个回复
屠创氓读叔