Как передать список значений как Sql Param с From Sql в Entity Framework Core - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно передать список идентификаторов на IN. Я пытался с приведенным ниже кодом, но не работает. В чем проблема с этим кодом?

// SampleDBQueryType- is DbQuery
databaseContext.SampleDBQueryType.FromSql(@"
        SELECT *
        FROM SampleTable
        WHERE UserObjectId IN (@userIds)", 
              new SqlParameter("userIds", GetCommaSeparatedStringValueForDbQuery(thirdPartyUserIds)))
        .ToList();

// Returns => "'id1', 'id2'"
private string GetCommaSeparatedStringValueForDbQuery(IEnumerable<string> values)
{
    string queryFilter = string.Empty;

    values.ToList().ForEach(v =>
         {
            queryFilter = string.IsNullOrEmpty(queryFilter) ? $"'{v}'" : $"{queryFilter},'{v}'";
         });

    return queryFilter;         
}

1 Ответ

1 голос
/ 07 апреля 2020

Вам нужно будет сделать что-то вроде этого:

var items = new int[] { 1, 2, 3 };

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

var rawCommand = string.Format("SELECT * from dbo.Shippers WHERE ShipperId IN ({0})", string.Join(", ", parameters));

var shipperList = db.Set<ShipperSummary>()
    .FromSqlRaw(rawCommand, sqlParameters.ToArray())
    .ToList();

foreach (var shipper in shipperList)
{
    Console.WriteLine(shipper.CompanyName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...