Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#将类作为参数传递_C#_Lambda_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Asp.net Mvc 5_Nest - Fatal编程技术网 elasticsearch,asp.net-mvc-5,nest,C#,Lambda,elasticsearch,Asp.net Mvc 5,Nest" /> elasticsearch,asp.net-mvc-5,nest,C#,Lambda,elasticsearch,Asp.net Mvc 5,Nest" />

c#将类作为参数传递

c#将类作为参数传递,c#,lambda,elasticsearch,asp.net-mvc-5,nest,C#,Lambda,elasticsearch,Asp.net Mvc 5,Nest,我想传递一个类作为参数 所以我想做的是传递一个类,例如:“Customer”给一个方法。 我想这样做,因为这样我也可以将“Contract”作为类传递给相同的方法。这样我就不需要为每个类都创建一个方法 旁白:我正在使用EntityFramework 6、MVC 5、Nest 1.0和ElasticSearch 1.4 这个概念是我们把东西放在ElasticSearch中,然后我们可以进行搜索。 搜索查询是: SearchElasticClient.Search<Customer>(b

我想传递一个类作为参数

所以我想做的是传递一个类,例如:“Customer”给一个方法。 我想这样做,因为这样我也可以将“Contract”作为类传递给相同的方法。这样我就不需要为每个类都创建一个方法

旁白:我正在使用EntityFramework 6、MVC 5、Nest 1.0和ElasticSearch 1.4

这个概念是我们把东西放在ElasticSearch中,然后我们可以进行搜索。 搜索查询是:

SearchElasticClient.Search<Customer>(body => body
                              .AllIndices()
                              .Size(500)
                              .Query(query => query
                                  .Bool(@bool => @bool
                                      .Must(must => must
                                          .QueryString(qs => qs
                                              .Query("XXXX"))))));
这些类之间的关系对我来说是无关的,所以我把它们排除在外

然后在我的HomeController中,我想要类似的东西

public class HomeController : Controller
{
  ...

     public ActionResult Search(String textToSearch)
    {
        //So here you see that I want to use the same method for both classes.
        Customer customer = Helpers.SearchHelper.Search(textToSearch);
        Contract contract = Helpers.SearchHelper.Search(textToSearch);
    }
}
那么我的SearchHelper应该是这样的:

public class Customer{
    public int CustomerID {get;set;}
    public String CustomerName {get;set;}
}

public class Contract{
    public int ContractID {get;set;}
    public String ContractName {get;set;}
}
public static class SearchHelper
{
     public static ElasticClient SearchElasticClient
        {
            get
            {
                Uri uri = new Uri("http://localhost:9200");
                var setting = new ConnectionSettings(uri, "default_INDEX");
                return new ElasticClient(setting);
            }
        }

        public static void SearchTest(String textToSearch, MyClass)
        {
            var test = SearchElasticClient
                            .Search<Customer>(body => body
                              .AllIndices()
                              .Size(500)
                              .Query(query => query
                                  .Bool(@bool => @bool
                                      .Must(must => must
                                          .QueryString(qs => qs
                                              .Query("XXXX"))))));

        }
}
公共静态类SearchHelper
{
公共静态ElasticClient SearchElasticClient
{
得到
{
Uri=新的Uri(“http://localhost:9200");
var设置=新连接设置(uri,“默认索引”);
返回新的ElasticClient(设置);
}
}
公共静态void SearchTest(字符串textToSearch,MyClass)
{
var测试=SearchElasticClient
.Search(body=>body
.AllIndices()
.尺寸(500)
.Query(Query=>Query
.Bool(@Bool=>@Bool
.Must(Must=>Must
.QueryString(qs=>qs
.查询(“XXXX”()()));
}
}
如您所见,现在我在代码中设置了类“Customer”。 我想用一个变量什么的来代替它

现在我已经尝试过了:

    public static void SearchTest<T>(String textToSearch)
    {
        var test = SearchElasticClient
                        .Search<T>(body => body
                          .AllIndices()
                          .Size(500)
                          .Query(query => query
                              .Bool(@bool => @bool
                                  .Must(must => must
                                      .QueryString(qs => qs
                                          .Query("XXXX"))))));

    }
publicstaticvoidsearchtest(stringtexttosearch)
{
var测试=SearchElasticClient
.Search(body=>body
.AllIndices()
.尺寸(500)
.Query(Query=>Query
.Bool(@Bool=>@Bool
.Must(Must=>Must
.QueryString(qs=>qs
.查询(“XXXX”()()));
}
这里我得到了编译错误:“无法将lambda表达式转换为类型‘Nest.ISearchRequest’,因为它不是委托类型。”

我不熟悉授权及其工作原理,也不知道我是否可以使用授权,因此,如果我需要授权,请提供足够的详细信息

我还尝试:

    public static void SearchTest(String textToSearch, Type myClass)
    {
        var test = SearchElasticClient
                        .Search<myClass>(body => body
                          .AllIndices()
                          .Size(500)
                          .Query(query => query
                              .Bool(@bool => @bool
                                  .Must(must => must
                                      .QueryString(qs => qs
                                          .Query("XXXX"))))));

    }
publicstaticvoidsearchtest(字符串textToSearch,键入myClass)
{
var测试=SearchElasticClient
.Search(body=>body
.AllIndices()
.尺寸(500)
.Query(Query=>Query
.Bool(@Bool=>@Bool
.Must(Must=>Must
.QueryString(qs=>qs
.查询(“XXXX”()()));
}
然后它给了我一个编译错误:“找不到类型或名称空间'myClass'。我理解为什么会出现这个错误,所以我知道它更像是公共静态void Search(..{..}),但我不知道如何实现它

我希望这能更好地解释我的问题

因此,这是“嵌套”搜索的实现,我希望避免复制粘贴搜索查询


提前感谢

使
搜索
方法通用化。泛型参数或多或少是一个类型参数,而不是一个对象。

我相信您要做的是使
搜索
泛型

public static classToPass Search<classToPass>()
publicstaticclasstopasssearch()
然后像这样使用它

Test x = Helper.Search<Test>(); //Test = class as definied above
TestTwo y = Helper.Search<TestTwo>();
testx=Helper.Search()//测试=上述定义的等级
testy=Helper.Search();
公共静态类帮助器
{
公共静态对象搜索(T类toPass)
{
SearchElasticClient
.Search(body=>body
.AllIndices()
.尺寸(500)
.Query(Query=>Query
.Bool(@Bool=>@Bool
.Must(Must=>Must
.QueryString(qs=>qs
.Query(“XXX”()()()));
}
}

您需要传递类的实例,而不是类本身。@WindRaven但他不想发送类的实例;他只想为方法提供一个类型,而不是一个实例。@Servy现在代码变得更有意义了。仿制药将是一种可行的方法,但对于lamda来说,它不会很好地工作。关于确切用例的更多信息将在这里有所帮助,您试图搜索什么,以及是否可以使用反射。我现在不在办公室,但我知道我的问题不清楚。ik willen创建/更新了问题,提供了更多细节和更好的示例。感谢大家的评论,并为糟糕的描述感到抱歉。我尝试过这样做,但由于lambda:s@Boeykes您应该创建一个关于如何使方法中的代码工作的新问题。
Test x = Helper.Search<Test>(); //Test = class as definied above
TestTwo y = Helper.Search<TestTwo>();
public static class Helper
{
    public static object Search<T>(T classToPass)
    {
        SearchElasticClient
                              .Search<T>(body => body
                                .AllIndices()
                                .Size(500)
                                .Query(query => query
                                    .Bool(@bool => @bool
                                        .Must(must => must
                                            .QueryString(qs => qs
                                                .Query("XXX"))))));

    }
}