ElasticSearch NEST не может преобразовать тип c # - PullRequest
0 голосов
/ 01 июля 2019

Во-первых, я бы сказал, что я новичок в C # и Elastic. Проблема, с которой я сталкиваюсь, заключается в моем коде, у нас есть две БД, и по определенному флагу он либо извлекается из эластичного, либо из БД SQL. Когда я пытаюсь получить данные из упругого, выдает ошибку, что не может преобразовать тип. Что я тут не так делаю?

Это мой сервисный файл, который вызывает файлasticservice.

public async Task<T> GetDataByitemId<T>(string schema, string tableName, string itemId)
    {
        if (_elasticService != null && _serviceConfiguration.UseElasticStore)
        {
            ISearchResponse<Summary> elasticResult = null;
            elasticResult = await _elasticService.SearchSummariesAsync(itemId);
            return elasticResult;
            **// Cannot implicitly convert type 'Nest.ISearchResponse<DTO.Models.Summarization>' to 'T'. An explicit conversion exists (are you missing a cast?) (CS0266) [ApplicationCore]**
        }
        else
        {
            var parameters = new Dictionary<string, object>()
        {
            { "id", itemId }
        };
            string table = CheckTableName(tableName) ? tableName : "";
            var query = $"SELECT * FROM \"{table}\" where \"ItemId\" = @id";
            return _repo.GetSummaryByItemId<T>(schema, query, parameters).Result.FirstOrDefault();
        }
    }

// Файл модели

namespace DTO.Models
{
        public DateTime? DataLastUpdated
    [Bind("ItemId,SummarizationLastUpdated")]
    [ElasticsearchType(IdProperty = nameof(ItemId))]
    public class Summary
    {
        [Required]
        public string DataId { get; set; }

        [Required]
        public DateTime? DataLastUpdated
        {
            get => DateTime.Now;
            set { }
        }
        public float? AvgCpu { get; set; }
        public float? AvgRam { get; set; }

        public bool Validate()
        {
            if (!InputValidation.ValidateEndpointItemId(ItemId))
            {
                Log.Error($"Summary has a missing or invalid Endpoint ID: {ItemId}");
                return false;
            }

            return true;
        }
    }
}

// Файл Elasticservice

public async Task<ISearchResponse<Summary>> SearchSummariesAsync(string ItemId)
        {
            if (!Connect()) return null;
            ISearchResponse<Summary> response = null;

            try
            {
                response = await _elasticClient.SearchAsync<Summary>(s => s.Type(typeof(Summary))
                    .Query(q => q.Match(m => m.Field(f => f.ItemId).Query(ItemId))));
            }
            catch (Exception)
            {
                // Ignored.
            }

            return response;
        }

// Интерфейс

  public interface IElasticService
{
    Task<ISearchResponse<Summary>> SearchSummariesAsync(string hardwareId);
}
...