2017-03-06 28 views
0

我們的領域模型(和數據模型)包含一個值類型LoanValueType。每種貸款都有這種類型。也就是說,LoanKey1和LoanKey2兩部分在每筆貸款中都是唯一的。如何從複雜類型列表中檢索數據庫中的對象列表?

loans.AddRange(
     _context.Loan 
      .Include(x => x.Customer) 
      .Include(x => x.Customer.Address) 
      //... 
      .Where(x => x.Status == ExampleStatus.Completed && x.ExampleDateTime > maxday) 
      //... 
      .Where(loan => loanIds.Any(x => 
          x.LoanKey1 == loan.LoanValueType.LoanKey1 && 
          x.LoanKey2 == loan.LoanValueType.LoanKey2)) 
     ); 

我們需要的是從列表loanIds(List)中獲取數據庫中的所有貸款。它早些時候被解決的方式導致一個接一個地調用數據庫,而這個數據庫根本就不是高性能的。

儘管如此,上述對數據庫的查詢結果是「只有基元類型或枚舉類型在此上下文中受支持」。我明白爲什麼,但無法找到解決該問題的方法。

我試圖枚舉之前的最後where子句,但它給了我一個太大的結果集。我只想從數據庫中檢索我的清單中的貸款。

編輯:

貸款值類型是這樣

public class LoanValueType 
{ 
    public string LoanKey1 { get; private set; } 

    public int? LoanKey2 { get; private set; } 
} 
+0

什麼'loanIds'的類型? –

+1

如果它是一個棘手的選擇(或複雜的選擇),你可能會考慮在SP中獲取該邏輯並調用它返回列表 – Jinish

回答

0
var separator = "_"; // Consider making it more complex/unique 
var loanIdsList = new List<string>(); 

foreach (var loanId in loanIds) 
{ 
    loanIdsList.Add(loanId.LoanKey1 + separator + loanId.LoanKey2); 
} 

loans.AddRange(
    _context.Loan 
     .Include(x => x.Customer) 
     .Include(x => x.Customer.Address) 
     //... 
     .Where(x => x.Status == ExampleStatus.Completed && x.ExampleDateTime > maxday) 
     //... 
     .Where(loan => loanIdsList.Contains(loan.LoanValueType.LoanKey1 + separator + loan.LoanValueType.LoanKey2)) 
    ); 
相關問題