2014-09-23 72 views
0

鑑於從ServiceStack端點以下定義執行更復雜的查詢:如何使用自動查詢

public class LoanQueue 
{ 
    public int LoanId { get; set; } 
    public DateTime Submitted { get; set; } 
    public DateTime Funded { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int Fico { get; set; } 
    public int Fraud { get; set; } 
    public int CDS { get; set; } 
    public int IDA { get; set; } 
    public string Income { get; set; } 
    public string Liabilities { get; set; } 
    public string Agent { get; set; } 
    public string Status { get; set; } 
    public string State { get; set; } 
    public string Product { get; set; } 
    public string Comment { get; set; } 
} 

public enum DateType 
{ 
    None, 
    Submitted, 
    Funded 
} 

[Route("/loan/queue/search", "GET")] 
public class LoanQueueQueryGet : QueryBase<LoanQueue> 
{ 
    public DateType DateType { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
    public string AgentUserName { get; set; } 
    public Languange Languange { get; set; } 
    public bool WorkingLoan { get; set; } 
    public bool MicrobusinessLoan { get; set; } 
    public LoanStatus LoanStatus { get; set; } 
} 

public object Get(LoanQueueQueryGet request) 
{ 
    if (request == null) throw new ArgumentNullException("request"); 
    var profiler = Profiler.Current; 
    using (profiler.Step("LoanServices.LoanQueue")) 
    { 

     SqlExpression<LoanQueue> q = AutoQuery.CreateQuery(request, Request.GetRequestParams()); 

     QueryResponse<LoanQueue> loanQueueResponse = AutoQuery.Execute(request, q); 

     return loanQueueResponse; 
    } 
} 

我的問題是這樣的,「它甚至有可能基於在服務請求對象上運行條件邏輯IMPL「?例如

如果DateType == DateType.Submitted

然後查詢在LoanQueue的提交屬性與BETWEEN子句(起始日期/結束日期)或

如果DateType == DateType.Funded

然後用BETWEEN子句(StartDate/EndDate)在LoanQueue上查詢資助的屬性。

我的猜測是,我試圖彎曲AutoQuery太遠,並將更好地服務,只是編碼它的舊時尚方式。我非常喜歡AutoQuery插件的烘焙功能,我相信有時候它會適合我的需求。

謝謝 斯蒂芬

回答

1

AutoQuery會忽略任何不匹配字段,以便你能使用它們與其他自定義邏輯擴展您的填充自動查詢,e.g:

public object Get(LoanQueueQueryGet request) 
{ 
    var q = AutoQuery.CreateQuery(request, Request.GetRequestParams()); 

    if (request.DateType == DateType.Submitted) 
    { 
     q.And(x => x.Submitted >= request.StartDate && x.Submitted < request.EndDate); 
    } 
    else 
    { 
     q.And(x => x.Funded >= request.StartDate && x.Funded < request.EndDate); 
    } 

    var loanQueueResponse = AutoQuery.Execute(request, q); 
    return loanQueueResponse; 
}