来自sqlraw查询的C#实体框架使用includes(in)而不是where子句



varname的正确语法是什么?我可以让它与这样的单个变量一起工作

string varname = "TOTAL_NORWAY"

然而,如果我想在其中有几个变量,我会返回一个空数组:

string varname = "'TOTAL_NORWAY', 'TOTAL_SWEDEN'";

return await _Context.theDataModel.FromSqlRaw(@"
select data
from data_table 
where Variable in ({0})


", varname).ToListAsync();

请记住,您可以将FromSqlRaw与Linq:结合使用


string varnames = new [] { "TOTAL_NORWAY", "TOTAL_SWEDEN" };
var query = _Context.theDataModel.FromSqlRaw(@"
select data
from data_table");

query = query.Where(x => varnames.Contains(x.Variable));
// Add more where clauses as needed
return await query.ToListAsync();

ErikEJ的帖子非常有帮助。对于那些不经常涉足EF Core的人来说,这个解决方案并不是那么微不足道。

我还有一个额外的where条款需要考虑,其他想知道的人都是这样做的。

var items = new int[] { 1, 2, 3 };
var parameters = new string[items.Length];
var sqlParameters = new List<SqlParameter>();
for (var i = 0; i < items.Length; i++)
{
parameters[i] = string.Format("@p{0}", i);
sqlParameters.Add(new SqlParameter(parameters[i], items[i]));
}
sqlParameters.Add(new SqlParameter("@userid", "userXYZ123"));

var rawCommand = string.Format("SELECT * from dbo.Shippers WHERE ShipperId IN ({0}) and userid = {1}", string.Join(", ", parameters), "@userid");
var shipperList = db.Set<ShipperSummary>()
.FromSqlRaw(rawCommand, sqlParameters.ToArray())
.ToList();

最新更新