2015-08-31 27 views
0

我如何使用Lambda表達式上有一個List PaymentFields對象Payment對象的名單。這是我目前的。C#Lambda表達式使用複雜對象

var list = paymentList.Where(payment => payment.PaymentFields.Any(field => field.FieldName == "ItemA" && field.FieldValue == "50");

這讓我有意達的字段名和50作爲字段值付款。不過,我想比較兩個PaymentFields是這樣的...

Where FieldName == "ItemA" && FieldValue = "50" && FieldName ItemA < FieldName ItemB

我將如何做到這一點?

我有兩個對象:

public class Payment 
{ 
    public int Id { set; get; } 
    public string Name { set; get; } 
    public List<PaymentFields> PaymentFields { set; get; } 
} 

public class PaymentFields 
{ 
    public string FieldName { set; get; } 
    public string FieldValue { set; get; } 
} 

下面是一個例子對象:

var payment = new Payment() 
{ 
    Id = 1, 
    Name = "Test", 
    PaymentFields = new List<PaymentFields>() 
    { 
     new PaymentFields() 
     { 
      FieldName = "ItemA", 
      FieldValue = "20" 
     }, 
     new PaymentFields() 
     { 
      FieldName = "ItemB", 
      FieldValue = "50" 
      } 
    } 
}; 

感謝您的幫助!

+0

您是否確定每次付款都會有兩個付款欄位? –

+0

@AndrewShepherd,是的。這就是爲什麼我有一個列表。 – Turp

回答

0

如果你是絕對肯定會有一個「意達」和「ItemB」,那麼這將正常工作。

如果不是「意達」或「ItemB」缺少,它會拋出異常。

var list = paymentList 
      .Where(payment => payment.PaymentFields.Any(field => field.FieldName == "ItemA" && field.FieldValue == "50") 
      .Where(payment => payment.PaymentFields.First(field => field.FieldName == "ItemA").FieldValue 
            < 
           payment.PaymentFields.First(field => field.FieldName == "ItemB").FieldValue) 
        );