Вопрос

Ошибка: 'Value "Id" was not found'

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<Guid>("Id");
}

Почему при попытке получить значение opportunityCollection[0].GetTypedColumnValue<Guid>("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<Guid>("Id");
}

В этом случае ошибки не возникает.

Можно ли получить Id записи каким-то другим образом, но чтобы был первый вариант с выбором одной колонки?

Нравится

7 комментариев
Лучший ответ

А если так 

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)

Алла Савельева,

ESQ использует Id для внутрених целей

esqOpportunity.PrimaryQueryColumn.IsAlwaysSelect = true; Вот так пишите и сможете получать Id, чтобы не писать Id1

Можно еще так: 
                opportunityId = opportunityCollection.First().PrimaryColumnValue;
           

Показать все комментарии