Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Dapper 在查询中自定义选择项<;对象>;衣冠楚楚_Dapper - Fatal编程技术网

Dapper 在查询中自定义选择项<;对象>;衣冠楚楚

Dapper 在查询中自定义选择项<;对象>;衣冠楚楚,dapper,Dapper,我是个衣冠楚楚的新手。 我想从conn.Query()中选择动态项,使其在SQL中执行存储过程 我的代码类似于: connection.Open(); var parameters = new DynamicParameters(); parameters.Add("@name", x.GetValue<string>("Name")); parameters.Add("@lastname

我是个衣冠楚楚的新手。 我想从conn.Query()中选择动态项,使其在SQL中执行存储过程

我的代码类似于:

            connection.Open();
            var parameters = new DynamicParameters();
            parameters.Add("@name", x.GetValue<string>("Name"));
            parameters.Add("@lastname", x.GetValue<string>("LastName"));
            var query = connection.Query<Costumer>(sql: "GetCostumer", param: parameters, commandType: CommandType.StoredProcedure);

如果问题是只选择两列,那么在最简单的级别上,您可以完全执行您已经在执行的操作,即

var finalResult = (from item in query
                  select new {
                      item.Name,
                      item.LastName
                  }).ToList();
请注意,这会将所有列提取回客户机,然后在那里重新映射。如果要在服务器上执行列筛选,则需要使用类似于
INSERT EXEC
的内容,并在后续的
SELECT
,即

DECLARE @table_var TABLE (cols)
INSERT INTO @table_var (cols) EXEC proc {args}
SELECT foo, bar FROM @table_var
虽然一个更干净的实现可能是公开一个UDF,但您可以使用:

SELECT foo, bar FROM dbo.SomeFunction(args);
var parameters = new {
    name = x.GetValue<string>("Name"),
    lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
    commandType: CommandType.StoredProcedure);
另一方面,如果
类型不存在,可以通过
动态
和非泛型
查询
方法来避免中间类型,但实际上它的效率略低于上述方法,因此应谨慎使用

还要注意,在这种情况下,您不需要
动态参数
;您可以使用:

SELECT foo, bar FROM dbo.SomeFunction(args);
var parameters = new {
    name = x.GetValue<string>("Name"),
    lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
    commandType: CommandType.StoredProcedure);
var参数=新建{
name=x.GetValue(“名称”),
lastname=x.GetValue(“lastname”)
};
var query=connection.query(“getCustomer”,参数,
commandType:commandType.StoredProcess);

如果问题是只选择两列,那么在最简单的级别上,您可以完全按照您已经在做的操作,即

var finalResult = (from item in query
                  select new {
                      item.Name,
                      item.LastName
                  }).ToList();
请注意,这会将所有列提取回客户机,然后在那里重新映射。如果要在服务器上执行列筛选,则需要使用类似于
INSERT EXEC
的内容,并在后续的
SELECT
,即

DECLARE @table_var TABLE (cols)
INSERT INTO @table_var (cols) EXEC proc {args}
SELECT foo, bar FROM @table_var
虽然一个更干净的实现可能是公开一个UDF,但您可以使用:

SELECT foo, bar FROM dbo.SomeFunction(args);
var parameters = new {
    name = x.GetValue<string>("Name"),
    lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
    commandType: CommandType.StoredProcedure);
另一方面,如果
类型不存在,可以通过
动态
和非泛型
查询
方法来避免中间类型,但实际上它的效率略低于上述方法,因此应谨慎使用

还要注意,在这种情况下,您不需要
动态参数
;您可以使用:

SELECT foo, bar FROM dbo.SomeFunction(args);
var parameters = new {
    name = x.GetValue<string>("Name"),
    lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
    commandType: CommandType.StoredProcedure);
var参数=新建{
name=x.GetValue(“名称”),
lastname=x.GetValue(“lastname”)
};
var query=connection.query(“getCustomer”,参数,
commandType:commandType.StoredProcess);

问题是什么?什么不起作用?或者你还需要什么?你只是想要两个专栏吗?问题是什么?什么不起作用?或者你还需要什么?你只是想要两列吗?