2017-09-07 5 views
-4

これは初心者の質問です。特定のリストを取得するために必要なこの2つのクラスがあります。LINQを使用してサブアイテムの別のリストからアイテムのリストを選択しますか?

public class Customer 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    ObservableCollection<Address> { get; set; } 
} 

public class Address 
{ 
     public string Street { get; set; } 
     public string City { get; set; } 
} 

そして私は、このテストデータがあります。

ジョー、ドウ、123 MAIN ST、ニューヨーク市
ジェーン、ドウ、456 MAIN ST、ニューヨーク市
ドナルド、トランプ、1600年ペンシルバニア州アベニュー、ワシントンDC
スポンジ、・スクエア、124コンクストリート、ビキニボトム
オスカー、すねる、セサミストリート、どこの市
ミロ、マーフィー、アンラッキーストリート、沼市

私は、都市が「ニューヨーク市」であるファーストネーム、姓、通り、都市の詳細をすべて知りたいと考えています。

LINQクエリを書くにはどうすればよいですか?あなたが実際に参加し、平坦化された結果セットをしたい場合は

var query = from c in customers 
      where c.addresses.Any(a => a.City == "New York City") 
      select c; 

:あなたは、「ニューヨーク」のアドレスとそのすべてのアドレス(階層)を持つすべての顧客は、あなたは、単にこれを行うだろうしたいと仮定すると、

+1

これまでに何を試しましたか? – Rahul

+0

https://stackoverflow.com/help/mcve - そのままのコードはコンパイルされません。 – mjwills

+0

確信はありますが、少なくとも1つのニューヨークのアドレスを持つ顧客には、customers.Where(c => c.Addresses.Any(a => a.City == "New York")); ' – juharr

答えて

0

テーブルと匿名タイプへの投影を行うことができます:

var query = from c in customers 
      from a in c.addresses 
      where a.City == "New York City" 
      select new 
      { 
       c.firstname, 
       c.lastname, 
       a.City, 
       a.Street 
      }; 
+0

これは、街が "ニューヨーク市"である街と街を得るのにどのように役立つのですか? "顧客がニューヨーク出身でシカゴ出身であるとします。あなたはそれをフィルタリングしないので、あなたのアプローチもシカゴアドレスを返します –

+0

これは少なくとも1つのニューヨークのアドレスで顧客を得ますが、OPは顧客名とニューヨークのアドレスを平らにしたいと思うようです。したがって、複数のニューヨークの住所を持つ顧客は、複数回表示されます。このデータの例では、それほど明確ではありません。 – juharr

+0

「姓、名などのすべての詳細を書いた」という質問はかなり曖昧です。フィルターに一致する1つのアドレスを持つ顧客のすべてのアドレスを意味すると解釈しました。しかし、私は@juharrがOPの意図かもしれないと示唆しているので、データを平坦化する別の例を提供しました。 –

関連する問題