#c# #asp.net-core
#c# #asp.net-ядро
Вопрос:
Вот мой пример кода:
using (IDbConnection con = new SqlConnection(Constants.DefaultConnectionString))
{
if (con.State == ConnectionState.Closed)
con.Open();
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@StandardObjectName", StandardObject);
parameter.Add("@UserID", UserID);
var AccountRecord = await con.QueryAsync<GetCustomDataForStandardObject>(
StoredProcedure.GetCustomobjectDataForStandardObject, parameter,
commandType: CommandType.StoredProcedure);
var mapResult = Common.AutoMapper.MapListData<GetCustomDataForStandardObject,
GetStandardBYName>(AccountRecord.ToList());
List<string> CustomData = new List<string>();
GetCustomObjectLinkData Data = null;
// DataTable dt = new DataTable();
// LeadRecord.ToList();
for (int a = 0; a < mapResult.Count; a )
{
int customobjectid = 0;
customobjectid = mapResult[a].CustomObjectID;
DynamicParameters pa = new DynamicParameters();
pa.Add("@CustomObjectSchemaId", customobjectid);
var rowAffected = await con.QueryAsync(StoredProcedure.GetCustomObjectData,
pa, commandType: CommandType.StoredProcedure);
rowAffected.ToList();
}
}
У меня есть несколько строк данных для нескольких customobjectid, и мне нужно добавить эти данные в массив или список. Кто-нибудь может мне помочь, пожалуйста?
Комментарии:
1. К вашему сведению,
.ToList()
возвращает коллекцию в виде нового списка. Я вижу, что вы вызываете этот метод, но ничего не делаете с возвращаемым значением, поэтому он ничего не делает. Если вы хотитеrowAffected
быть списком, тогда вы должны сделать:var rowAffected = await con.QueryAsync(argsHere).ToList();
2. Кроме того,
rowAffected
объявляется внутриfor
цикла, поэтому его область действия ограничена циклом, и поскольку он никогда не используется,for
цикл ничего не делает.3. Не
"object"
"GetCustomobjectDataForStandardObject"
должно быть"Object"
? Не уверен, просто читал код.
Ответ №1:
Это просто выстрел в темноте, основанный на вашем примере кода, поскольку я ничего не знаю о dapper (я предполагаю, что это dapper? Если да, пожалуйста, добавьте Dapper
тег к вашему вопросу), но посмотрите, приблизит ли вас что-то подобное к тому, что вы хотите.
Я использую ToList()
при вызове to QueryAsync
, поэтому для каждого result
mapResult
List<rowData>
входа возвращается новый. Затем вызов .ToList()
.Select
оператора возвращает результат в виде a List<List<rowData>>
, где каждый внутренний список представляет собой строку значений, а внешний список представляет собой список строк.
Приведенный ниже код заменит ваш for
цикл:
var rowsAffected = mapResult.Select(result =>
{
DynamicParameters pa = new DynamicParameters();
pa.Add("@CustomObjectSchemaId", result.CustomObjectID);
return await con.QueryAsync(StoredProcedure.GetCustomObjectData,
pa, commandType: CommandType.StoredProcedure).ToList();
}).ToList();
// rowsAffected is a List<List<rowData>>, where the outer list contains all the rows
// and each inner list is the row data for a specific row
Комментарии:
1. Dapper использует в моем пространстве имен reference.dapper, используемый для dynamicparameters.mapresult, имеет все идентификаторы, поэтому я объявил цикл для mapresult и передал customobjectid один за другим в мою процедуру и получил данные, сохраненные в rowaffected var.so мне нужно прочитать значения var и сохраненные данные в списке, если цикл не остановлен.
2. ОК. Подходит ли вам этот пример? Я не могу сказать из вашего комментария. Добавление
dapper
тега к вашему вопросу привлечет больше экспертов.