簡體   English   中英

C# 實體框架 fromsqlraw 查詢,包含(in)而不是 where 子句

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

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM