var esqOpportunity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Opportunity");
esqOpportunity.AddColumn("Id");
var opportunityCollection = esqOpportunity.GetEntityCollection(userConnection);
Guid opportunityId = Guid.Empty;
if (opportunityCollection.Count > 0) {
opportunityId = opportunityCollection[0].GetTypedColumnValue("Id");
}
Почему при попытке получить значение opportunityCollection[0].GetTypedColumnValue("Id") выдается ошибка: Value "Id" was not found?
В профайлере в запросе Id записи выбирается.
Если написать такой код:
var esqOpportunity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Opportunity");
esqOpportunity.AddAllSchemaColumns();
var opportunityCollection = esqOpportunity.GetEntityCollection(userConnection);
Guid opportunityId = Guid.Empty;
if (opportunityCollection.Count > 0) {
opportunityId = opportunityCollection[0].GetTypedColumnValue("Id");
}
В этом случае ошибки не возникает.
Можно ли получить Id записи каким-то другим образом, но чтобы был первый вариант с выбором одной колонки?
Нравится
А если так
var esqOpportunity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Opportunity"); var colidName = esqOpportunity.AddColumn("Id"); var opportunityCollection = esqOpportunity.GetEntityCollection(userConnection); Guid opportunityId = Guid.Empty; if (opportunityCollection.Count > 0) { opportunityId = opportunityCollection[0].GetTypedColumnValue<Guid>(colidName.Name); }
А если так
var esqOpportunity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Opportunity"); var colidName = esqOpportunity.AddColumn("Id"); var opportunityCollection = esqOpportunity.GetEntityCollection(userConnection); Guid opportunityId = Guid.Empty; if (opportunityCollection.Count > 0) { opportunityId = opportunityCollection[0].GetTypedColumnValue<Guid>(colidName.Name); }
Григорий Чех,
Спасибо за вариант решения. Так, конечно, работает.
Интересно, что работает еще и так:
opportunityCollection[0].GetTypedColumnValue<Guid>("Id1").
Но почему "Id1" (в запросе же колонка называется "Id")???
Видимо, так создаётся вторая колонка Id в запросе вроде «select id, id as id1».
Зверев Александр,
Но в профайлере ж запрос создается в таком виде:
SELECT
[Opportunity].[Id] [Id]
FROM
[dbo].[Opportunity] [Opportunity] WITH(NOLOCK)
esqOpportunity.PrimaryQueryColumn.IsAlwaysSelect = true; Вот так пишите и сможете получать Id, чтобы не писать Id1
Можно еще так:
opportunityId = opportunityCollection.First().PrimaryColumnValue;