由于EF Core目前不能在数据库中执行“group by”查询,因此我使用以下查询来完成此操作(InvoiceQuery
是DbQuery
类型):
long merchantId = 177;
var invTokens = new List<string> {"qasas", "efsac"};
string inClause = string.Join(",", invTokens);
string query = $@"SELECT i.Token, i.Balance, COALESCE(SUM(i.Amount), 0) AS ProcessingAmount
FROM inv.Invoices i
WHERE i.Token IN ({inClause})
AND i.MerchantId = {merchantId}
AND i.Status = {(int)InvoiceStatus.Scheduled}
GROUP BY i.Token, i.Balance";
return await dbContext.InvoicesQuery.FromSql(query).ToListAsync();
上述代码运行完美,但我不喜欢它,因为它会提示一个“可能存在 SQL 注入漏洞”的警告。我知道我可以使用 #pragma 来禁止这个警告(这就是我目前正在使用的)。
我尝试了将查询和参数传递给 FromSql 方法,那样做可以工作,但是进入 IN 子句的参数没有正确映射。
尝试使用 $"'{string.Join("', '", invTokens)}'",但它没有起作用。
如果有帮助,将不胜感激。
inClause
值。在运行时,query
的确切值是什么? - mjwills