我正在尝试使用此处记录的功能: 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的一个例子。
任何想法都将受到赞赏。
提前谢谢。
答案 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; }
}
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);