简体   繁体   English

C# 实体框架 fromsqlraw 查询,包含(in)而不是 where 子句

[英]C# entity framework fromsqlraw query with includes (in) instead of where clause

What is the correct syntax for varname to make this query work? varname 使此查询工作的正确语法是什么? I can get it to work with a single variable like我可以让它与单个变量一起工作,例如

string varname = "TOTAL_NORWAY"

However, if I want to have a few variables in there, I get an empty array returned:但是,如果我想在其中包含一些变量,则会返回一个空数组:

    string varname = "'TOTAL_NORWAY', 'TOTAL_SWEDEN'";
    
   return await _Context.theDataModel.FromSqlRaw(@"
                        select data
                            from data_table 
                            where Variable in ({0})
                            
    
                    ", varname).ToListAsync();

Remember that you can combine FromSqlRaw with Linq:请记住,您可以将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's post was very helpful. ErikEJ 的帖子非常有帮助。 The solution is not so trivial for someone who doesn't dabble in EF Core regularly.对于不经常涉足 EF Core 的人来说,解决方案并不是那么简单。

I also had an extra where clause to consider, and this was done like so for anyone else wondering.我还有一个额外的 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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM