2017-03-06 4 views
0

ドメインモデル(およびデータモデル)には、値タイプLoanValueTypeが含まれています。そのタイプは各ローンに固有のものです。すなわち、2つの部分、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)というリストにあるデータベースからすべてのローンを取得することです。これは、以前はパフォーマンスが全くないデータベースへの1回の呼び出しをもたらす方法で解決されました。

上記のデータベースへのクエリでは、「プリミティブ型または列挙型のみがこのコンテキストでサポートされています」。私は理由を理解していますが、その問題を解決する方法を見つけることができません。

私は最後のwhere節の前に列挙しようとしましたが、それは私に大きすぎる結果セットを与えます。私はデータベースから私のリストのローンを取り出すだけです。

EDIT:

ローン値の型が `loanIds`の種類は何この

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

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

のようなものですか? –

+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)) 
    ); 
関連する問題