Dapper将参数传递给多映射器

adv*_*ner 7 dapper

使用单个表查询,我将了解如何执行此操作:

var sql = @"SELECT NAME, ID, COUNTY
                FROM INFO_NAME
                WHERE (NAME LIKE @Name) ORDER BY NAME, ID ASC";

IEnumerable<NameView> entrys = sqlConnection.Query<NameView>(sql, new { Name = "%" + name + "%" });
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用多重映射,但不确定如何传递参数。

var sql = @"SELECT NAME, a.ID, 
        b.ID, ADDRESS
        FROM INFO_NAME_NEW a 
        LEFT OUTER JOIN  INFO_ADDRESS b on a.ID = b.ID
        WHERE (NAME LIKE @TName) ORDER BY NAME, a.ID ASC";

var entrys = sqlConnection.Query<NameView, AddressView, NameView>(sql,
    (a, b) =>
    {
        a.AddressView = b;

        return a;
    },
    splitOn: "ID").AsQueryable();           
Run Code Online (Sandbox Code Playgroud)

我正在测试DynamicParameters(但是它在存储过程中讨论过,因此不确定这是否是正确的方向):

var param = new DynamicParameters();
param.Add("@Name", "%" + name + "%");
Run Code Online (Sandbox Code Playgroud)

我试过了:

(a, b) =>
{
    a.Name =  "%" + name + "%";
    a.AddressView = b;

    return a;
},
Run Code Online (Sandbox Code Playgroud)

但是结果显示名称为“%somename%”。有什么建议么?

更新1

谢谢马克,您的建议解决了我的问题。所以现在我的代码如下所示:

var entrys = sqlConnection.Query<NameView, AddressView, NameView>(sql,
    (a, b) =>
    {
        a.AddressView = b;

        return a;
    },
    new { Name = "%" + name + "%" },
    splitOn: "ID").AsQueryable();   
Run Code Online (Sandbox Code Playgroud)

而且很好