簡體   English   中英

通用彈性搜索方法c#

[英]Generic Elastic Search Method c#

我正在使用Nest。

https://www.nuget.org/packages/NEST/6.1.0

我有以下代碼:

    public class foo
    {
        public Guid id { get; set; }
    }

    public class foo2
    {
        public Guid id { get; set; }
    }


    public IReadOnlyCollection<T> GetDocumentAsync<T>(Guid id) where T: class
    {
        var searchResponse = _client.Search<T>(s => s
            .Query(q => q
                .Match(m => m
                    .Field(f => f.id) //f.id is not a property of T
                    .Query(id.ToString())
                )
            )
        );

        return searchResponse.Documents;
    }

問題:如何將字段作為ID傳遞? 我知道我可以創建一個接口,但是我無法訪問這些類。 還有另一種映射方式嗎?

T是泛型的,如果要使用特定屬性,則需要使用非泛型方法或添加為您提供Id屬性的約束。 例如,具有這樣的接口:

public interface IHasId
{
    Guid id { get; }
}

這使您的模型如下所示:

public class foo : IHasId
{
    public Guid id { get; set; }
}

public class foo2 : IHasId
{
    public Guid id { get; set; }
}

現在,您的方法將具有更新的約束:

public IReadOnlyCollection<T> GetDocumentAsync<T>(Guid id)
    where T : class, IHasId // <--- Add this
{
    // Snip
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM