1
我有一個存儲庫,其中幾個方法在謂詞中使用相同的邏輯。如何構建使用傳入參數構建Expression的存儲庫方法?
public IList<Loan> GetLoansByCommitmentID(int commitmentID)
{
var query = this.context.Loans.Where(l => l.CommitmentLoan != null &&
l.CommitmentLoan.CommitmentID == commitmentID &&
(l.LoanStatusTypes == null || (l.LoanStatusTypes.Description != "Invalid")));
return query.ToList();
}
在上面的代碼,它的最後括號內的子表達式:
(l.loanStatusTypes == null || (l.LoanStatusTypes.Description != "Invalid"))
我想,這樣只有在貸款給這片移動到庫中的一個私有方法,在這種情況下, ,並評估爲布爾值。但是,如果將此邏輯移入方法中,EF不理解如何評估方法調用。因此,在思考了一下之後,我決定或許正確的做法是讓私有存儲庫方法將Loan作爲參數,然後返回一個用於調用lambda表達式的Expression,類似於Expression工廠方法即:
public Expression IsLoanInvalid(Loan l);
有誰知道這是否會克服EF的無法理解方法調用或者我應該改爲創建自定義ExpressionVisitor或有另一種解決方案,我應該嘗試?
此外,如果上述建議的解決方案是可能的,我走這條路線,我該如何建立一個表達式樹,以便它使用傳入的參數?我已經成功地實現了一個構建表達式的方法,但是迄今爲止還沒有成功將Loan參數傳遞給構建的表達式以返回到調用代碼。先謝謝你。
也非常完美,非常感謝! – Rawlins