2016-03-28 18 views
0

Nasıl lambda ifadeleri kullanarak bir nesne olan bir sözlükler değeri ararsınız. (Aşağıdaki sınıfları kullanarak) lambda kullanan sözlük dizisi değeri arama

Dictionary<int, House[]> houseDict = new Dictionary<int, House[]>(); 

10 evlerin 3 elemanlarının her biri vardır ki.

Bir müşteriye ait evi/evi nasıl bulabilirim?

Bu

şimdiye kadar var ama bu işe yaramazsa housenumber

houseDict[0].Where(s => s.GetCustomer() == theCustomer) 

için daraltmak için nasıl bilmiyorum ne - Eğer>houseDict[0].SelectMany(s => s.GetHouseNumber()).Where(c => c.GetCustomer() == theCustomer);

public class House 
{ 
    private static int _instances = 0; 
    private int houseNumber; 
    private bool sold; 
    private bool reserved; 
    private bool free; 

    private Customer customer; 

    public House(int theHouseNumber) 
    { 
     houseNumber = theHouseNumber; 
     sold = false; 
     reserved = false; 
     free = true; 
    } 

    ~House() 
    { 
     _instances--; 
    } 

    public void SellHouse(Customer buyer) 
    { 
     customer = buyer; 
     sold = true; 
     free = false; 
    } 

    public void ReserveHouse(Customer reserver) 
    { 
     customer = reserver; 
     free = false; 
     sold = false; 
     reserved = true; 
    } 

    public void ReturnHouse() 
    { 
     customer = null; 
     free = true; 
     sold = false; 
     reserved = false; 
    } 

    public void BuyReservedHouse(Customer buyer) 
    { 
     sold = true; 
    } 

    public bool IsFree() 
    { 
     return free; 
    } 

    public bool IsReserved() 
    { 
     return reserved; 
    } 


    public int GetHouseNumber() 
    { 
     return houseNumber; 
    } 

    public void SetCustomer(Customer buyer) 
    { 
     customer = buyer; 
    } 

    public Customer GetCustomer() 
    { 
     return customer; 
    } 

} 

public class Customer 
{ 
    private static int _instances = 0; 
    private String name; 
    private int id = 0; 

    public Customer(String customerName) 
    { 
    _instances++; 
    name = customerName; 
    id = _instances; 
    } 

    public String GetName() 
    { 
    return name; 
    } 

    public int GetId() 
    { 
    return id; 
    } 
} 
+2

Sözlüğün 'ın' anahtarı nedir? Neden anahtar = 0 ile arama yapıyorsunuz? Daha fazla bağlam sağlayabilir misiniz? –

+0

@Michael Yayınlarımı düzenledim –

+0

@YacoubMassad int anahtar sokak, örneğin sokak 1, sokak 2'yi kullanarak anahtar [0] kullanarak elde ettiğim şeyin bir örneğini sağlamak için sadece –

cevap

2

belirli için evler Müşterilerin çoğu ID üzerine yayılmış olabilirsiniz ardından o zaman tüm değer koleksiyonlarında aramanız gerekebilir:

Bu, theCustomerörneğinin'un çoklu değer koleksiyonunda aynı örnek olduğunu varsayar. Eğer kimliğine dayalı olarak eşleşen etmek meed o zaman kullanabilirsiniz: Eğer sözlüğü, sözlükte sadece ilk öğeyi aramak isteyen gibi geliyor

houseDict.SelectMany(kvp => kvp.Value) 
     .Where(s => s.GetCustomer().GetId() == theCustomer.GetId()) 
+0

Bunun için teşekkürler, ama ne tek bir kimlik? Bir kişinin birden fazla ev sahibi olabileceği yer? Örneğin. ilk anahtar/kimlik evi içinde 3 ev var. [0] –

+0

Her ikisi de aynı müşteriye sahipse, her iki sorgu birden çok eve dönebilir. Fark, bu evlerin aynı müşteri _instance_ veya aynı kimliğe sahip farklı örnekleri içerip içermediğidir. –

+0

Üzgünüm, son yorumumda daha açık olmalıydım. houseDict [0] 'da, House dizisi elemanlarının 3'ünün müşteri olarak John olduğunu söyleyin. o zaman lambda kullanarak nasıl geri alırsınız. tüm sözlükte arama yapmadan, yani houseDict [1] araması yapılmadan, houseDict [2] –

0

. Sürece bir using System.Linq; bildirimde bulunmamış olarak, bunu yapmak mümkün olmalıdır:

houseDict.ToList().Where(s => s.Value.GetCustomer() == theCustomer); 

Bu> bir List içine Sözlük değişecek ve bununla bir lambda kullanabilirsiniz.

İlgili konular