我是Dapper的新人。 我想从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);
和我的存储过程类似于:
select * from Costumer where name = @Name and lastname = @lastname
在实体框架中,我可以通过以下代码解决我的问题:
IQueryable<User> query = container.GetQuery<Users>();
var finalResult = (from item in query
select new {
item.name,
item.lastname
}).ToList();
答案 0 :(得分:0)
如果问题只是选择两列,那么在最简单的层面上,你可以完全按照你已经做的那样做,即
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);
顺便说一句,如果<Costumer>
类型不存在,则可以通过dynamic
和非通用Query
方法避免中间类型,但实际上效率略低于上述,所以应该谨慎使用。
另请注意,在这种情况下您不需要DynamicParameters
;你可以使用:
var parameters = new {
name = x.GetValue<string>("Name"),
lastname = x.GetValue<string>("LastName")
};
var query = connection.Query<Costumer>("GetCostumer", parameters,
commandType: CommandType.StoredProcedure);