ServiceStack OrmLite CustomSelect不工作?

时间:2016-10-28 06:27:19

标签: ormlite-servicestack

我正在尝试使用此处记录的功能: https://github.com/ServiceStack/ServiceStack.OrmLite#custom-sql-customizations

这就是我使用它的方式:

var q = Db.From<MemberAccess>().LeftJoin<Member>();
return Db.Select<MemberResponse>(q);

响应对象:

public class MemberResponse
{
    public Guid Id { get; set; }

    public string MemberFirstName { get; set; }

    public string MemberLastName { get; set; }

    public string MemberEmail { get; set; }

    [Default(OrmLiteVariables.SystemUtc)]
    public string AccessedOn { get; set; }

    [CustomSelect("CONCAT(LEFT(Member.FirstName, 1),LEFT(Member.LastName,1))")]
    public string MemberInitial { get; set; }
}

似乎我在CustomSelect中放入的任何东西都没有被使用。
也许,我没有正确使用它?
另外,默认属性也不起作用。
我试过,因为这是doco的一个例子。

任何想法都将受到赞赏。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

[CustomSelect]仅适用于源表。选择自定义类型的结果用于映射MemberResponse类型的返回结果集,对执行的查询没有任何影响。

同样,[Default(OrmLiteVariables.SystemUtc)]用于在创建表时定义默认值,该表仅在创建列定义时使用,因此它仅对源表类型有用。 / p>

这两个属性只应添加到源MemberAccess上才能产生任何效果,映射的MemberResponse可以在没有任何属性的情况下访问这些属性,例如:

public class MemberResponse
{
    public Guid Id { get; set; }

    public string MemberFirstName { get; set; }

    public string MemberLastName { get; set; }

    public string MemberEmail { get; set; }

    public string AccessedOn { get; set; }

    public string MemberInitial { get; set; }
}

Sql.Custom()API

v4.5.5中添加的新Sql.Custom() API available on MyGet将允许您选择自定义SQL片段,例如:

var q = Db.From<MemberAccess>().LeftJoin<Member>()
  .Select<MemberAccess,Member>((a,m) => new {
    Id = a.Id,
    MemberFirstName = m.FirstName,
    MemberLastName = m.LastName,
    MemberEmail = m.Email,
    MemberInitial = Sql.Custom("CONCAT(LEFT(Member.FirstName,1),LEFT(Member.LastName,1))")
  });
return Db.Select<MemberResponse>(q);