Во-первых, я бы сказал, что я новичок в 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);
}