Добрый день. У меня есть такая задача просуммировать все количество по продуктам на одной детали(там продуктов с одним названием может быть несколько) и в случае если там продукт с таким названием есть изменить запись, если нет создать новую. Проблем с изменением нет, а вот с созданием есть. Вот фрагмент моего кода:
bool flagInPoints = true;
Guid ourId = new Guid();
var sysUserConn = UserConnection.AppConnection.SystemUserConnection;
var manager = sysUserConn.EntitySchemaManager.GetInstanceByName("CHPoints");
var app = manager.CreateEntity(UserConnection);
for(int l = 0; l < idResult.Count; l++)
{
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "CHPoints");
EntitySchemaQueryColumn id = esq.AddColumn("Id");
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "CHProduct", idResult[l].ToString()));
var summaryEntity = esq.GetEntityCollection(UserConnection);
foreach (var entity in summaryEntity)
{
if (entity !=null)
{
ourId = entity.GetTypedColumnValue(id.Name);
}
else
{
flagInPoints = false;
}
if(flagInPoints)
{
app.FetchFromDB(ourId);
app.SetColumnValue("CHProductId", idResult[l]);
app.SetColumnValue("CHAmount", countResult[l]);
app.Save(false);
}
else
{
app.SetDefColumnValues();
app.SetColumnValue("CHProductId", idResult[l]);
app.SetColumnValue("CHAmount", countResult[l]);
flagInPoints = true;
app.Save(false);
}
}
}
Создание я пытаюсь сделать в последнем else. Буду очень благодарен за помощь.
Нравится
Я не вполне понимаю задачу, но например (под рукой только Service-сборка). Есть "Сервисы", в сервисах деталь, там повторяются значения "Уровень поддержки".
Пишем примерно следующее в скриптаске:
var esqMain = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer"); var supLvlColumn = esqMain.AddColumn("SupportLevel.Id"); var supLvlColumnName = esqMain.AddColumn("SupportLevel.Name"); esqMain.IsDistinct=true; esqMain.Filters.Add(esqMain.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); //Id страницы "сервисы" var col = esqMain.GetEntityCollection(UserConnection); foreach (var item in col) { var id = item.GetTypedColumnValue<Guid>(supLvlColumn.Name); var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer"); EntitySchemaQueryColumn engineers = esq.AddColumn("Engineer"); engineers.SummaryType = AggregationType.Count; esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "SupportLevel", id)); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); Entity summaryEntity = esq.GetSummaryEntity(UserConnection); var supLvl = item.GetTypedColumnValue<string>(supLvlColumnName.Name); var engCount = summaryEntity.GetTypedColumnValue<int>(engineers.Name); } return true;
ну и в отладчике:
Т.е. можно определить какое именно значение повторяется и сколько раз.
Нет, ну foreach никогда не выдаст null у entity(только если в коллекцию запихнут пустую entity при формировании результатов esq, что сомнительно). Если коллекция будет 0 размера, то он тупо не отработает. Соответственно ourId - всегда guid из базы, flagInPoints - всегда true. Логика работает именно так, как описана. Всё ок.
Я не вполне понимаю задачу, но например (под рукой только Service-сборка). Есть "Сервисы", в сервисах деталь, там повторяются значения "Уровень поддержки".
Пишем примерно следующее в скриптаске:
var esqMain = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer"); var supLvlColumn = esqMain.AddColumn("SupportLevel.Id"); var supLvlColumnName = esqMain.AddColumn("SupportLevel.Name"); esqMain.IsDistinct=true; esqMain.Filters.Add(esqMain.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); //Id страницы "сервисы" var col = esqMain.GetEntityCollection(UserConnection); foreach (var item in col) { var id = item.GetTypedColumnValue<Guid>(supLvlColumn.Name); var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ServiceEngineer"); EntitySchemaQueryColumn engineers = esq.AddColumn("Engineer"); engineers.SummaryType = AggregationType.Count; esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "SupportLevel", id)); esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", new Guid("9cd38a93-2835-46fa-8c55-d3c7f4684824"))); Entity summaryEntity = esq.GetSummaryEntity(UserConnection); var supLvl = item.GetTypedColumnValue<string>(supLvlColumnName.Name); var engCount = summaryEntity.GetTypedColumnValue<int>(engineers.Name); } return true;
ну и в отладчике:
Т.е. можно определить какое именно значение повторяется и сколько раз.