这是实体框架 8。我有以下查询:
var fullTextQuery = $"SELECT top {maxRows} * FROM FreeTextTable(Organizations, *, {{0}}, {maxRows}) as t INNER JOIN Organizations u on u.Id = t.[KEY]";
var query = dbContext.Organizations
.FromSqlRaw(fullTextQuery, queryText);
.Where(org => org.Name.Contains(itemName))
.ToListAsync();
这将返回
FreeTextTable()
应返回的对象,但 Where()
子句应排除该对象。 Where()
子句是否被忽略?或者我需要将其逐字添加到FromRawSql()
中吗?还是别的什么?
它应该可以工作,尽管有一些限制,主要是围绕存储过程。也就是说,除非绝对必要,否则您应该使用
FromSql
而不是 FromSqlRaw
。
凭直觉,我会考虑稍微重构一下查询:
var fullTextQuery = $"SELECT u.* FROM Organizations u INNER JOIN FreeTextTable(Organizations, *, {{0}}, {maxRows}) as t ON u.Id = t.[KEY]";
var query = await dbContext.Organizations
.FromSql(fullTextQuery, queryText);
.Where(org => org.Name.Contains(itemName))
.ToListAsync();
“TOP(maxRows)”由自由文本搜索的顶部结果的内部联接覆盖。我希望如果 EF 满足查询最初将转到 Organizations 表,这可能足以让它高兴地允许使用 where 子句。
否则,如果查询确实运行但似乎仍然没有考虑
Where
子句,请运行探查器来捕获实际使用的 SQL,这可能会揭示查询解析中剩余的一些有趣之处。