私はしばらくの間、記述しようとしている linq クエリに適した解決策を見つけようとしています。
私のモデル構造には、PaymentRecords のリストを保持する Item クラスがあります。クエリで達成したいことは次のとおりです。
public class PaymentRecord
{
public int PaymentRecordId { get; set; }
[Required]
public double PaymentAmount { get; set; }
[Required]
public DateTime DateOfPayment { get; set; }
[Required]
public bool FinalPayment { get; set; }
[JsonIgnore]
public Item Item{ get; set; }
}
public class Item
{
public int ItemId { get; set; }
public List<PaymentRecord> PaymentRecords {get; set;}
...various other properties
}
PaymentRecord リストが以下の条件に一致する (これで問題ありません)、または PaymentRecord が null である (例: Items クラスに PaymentRecord がない) すべてのアイテムを選択します。これを行う方法はありますか?
var result = m_context.Item
.SelectMany(
x => x.PaymentRecords.Where(p => (p.FinalPayment == true
&& p.DateOfPayment >= _revenueStatementRequest.StartDate
&& p.DateOfPayment <= _revenueStatementRequest.EndDate)
|| p.FinalPayment != true),
(x, p) => x
)
.ToList();
理想的には、私は以下のようなことをしたいと思っていますが、私は仕事に似たものを手に入れることができませんでした:
var result = m_context.Item
.SelectMany(
x => x.PaymentRecords.Where(p => (p.FinalPayment == true
&& p.DateOfPayment >= _revenueStatementRequest.StartDate
&& p.DateOfPayment <= _revenueStatementRequest.EndDate)
|| p.FinalPayment != true)
|| x.PaymentRecords == null,
(x, p) => x
)
.ToList();
与えられた答えから作業した後、私はこれを持っています:
m_context.Item.Where(c => (!
c.PaymentRecords.Any(q => (q.FinalPayment &&
q.DateOfPayment >= _revenueStatementRequest.StartDate &&
q.DateOfPayment <= _revenueStatementRequest.EndDate)
|| q.FinalPayment != true
)
)
&& (c..Type == Booked || c.Type == Reserved)
&& (c.StartDate < _revenueStatementRequest.StartDate)
)