2016-11-01 1 views
2

Ich möchte LineOfBusiness Eigentum von promotionCatalogResponseRootObject retreive wo PromotionID zu myIdLambda Expression Eigenschaften für die Suche nach

public class PromotionCatalogResponseRootObject 
{ 
    public PromotionCatalogResponse PromotionCatalog { get; set; } 
} 

public class Promotion 
{ 
    public string PromotionId { get; set; } 
    public string LineOfBusiness { get; set; } 
    public string PromotionName { get; set; } 
} 

public class PromotionCatalogResponse 
{ 
    public List<Promotion> Promotion { get; set; } 
} 

ich so begann gleich ist, aber ich weiß, dass ich es falsch zu machen. Bitte führen

string myId = "7596"; 
string lineOfBusiness = dataPromotionCatalog.PromotionCatalog 
              .Promotion.Find(p => p.LineOfBusiness); 

Antwort

7

Was Ihnen fehlt, das ist die Find Methode ein Prädikat mit einem bool Rückgabewert erhalten erwartet, aber sie einen string zurückkehren, die LineOfBusiness Eigenschaft.

Zuerst die gewünschten Elemente filtern und dann die gewünschte Eigenschaft auswählen. Außerdem würde ich mit der Where statt der Find gehen. (Find() vs. Where().FirstOrDefault())

var result = dataPromotionCatalog.PromotionCatalog.Promotion 
           .Where(i => i.PromotionId == myId) 
           .Select(i => i.LineOfBusiness); 

oder in Abfragesyntax

var result = (from item in dataPromotionCatalog.PromotionCatalog.Promotion 
       where item.PromotionId == myId 
       select item.LineOfBusiness); 

Wenn Sie erwarten/wollen ein Element haben, dann FirstOrDefault verwenden:

var result = dataPromotionCatalog.PromotionCatalog.Promotion 
       .FirstOrDefault(i => i.PromotionId == myId)?.LineOfBusiness; 
+0

Was passiert, wenn ich nicht '.' und benutze einfach '.'? –

+2

@HumaAli Dann, wenn kein Element gefunden wurde, erhalten Sie eine 'NullReferenceException'. Überprüfen Sie den Link, den ich über 'Null Propagation' gegeben habe –

Verwandte Themen