2011-12-06 4 views
2

私はストアリスト(storeList)オブジェクトを持っています。 (ストアのリストで構成) 各ストアにはアドレスのリストがあります。各アドレスには、PHYSICAL、ALTERNATIVEまたはMAILINGのAddressTypeプロパティがあります。Linq。リスト内のリストを照会する方法は?

これが私の最初の試みである:私は一つだけのアイテムでリストを得ることを期待した結果

StoreAddressList result = 
    (from str in storeList 
    where 
    str.AssetAddresses.Any(p => p.AddressType.Name == "PHYSICAL") 
    select str.AssetAddresses).FirstOrDefault(); 

(ここで、私はそのプロパティを変更することができるように物理アドレスオブジェクトを返すようにしようとしています

アドレスタイプはPHYSICALですが)、3つのアイテム(3つのタイプすべて)のリストを取得します。ここで何が間違っていますか?

おかげ

+0

あなたは何を選択しようとしていますか?リスト内の最初のストアを選択しようとしているようですが、アドレスタイプのいずれかが「PHYSICAL」に等しいストアがあります。あれは正しいですか? – ken

答えて

9

、アドレスのリストに各店舗を投影することにより、アドレスのリストのリストを平らに平坦化を達成するためにSelectManyを使用して、アドレスのみのタイプが物理的であるものを取る:

var addressesToModify = 
    storeList.SelectMany(store => store.AssetAddresses) 
      .Where(address => address.AddressType.Name == "PHYSICAL"); 
クエリ構文で

:それは私たちが説明したように正確に読み込む方法

var addressesToModify = 
    from store in storeList 
    from address in store.AssetAddresses 
    where address.AddressType.Name == "PHYSICAL" 
    select address; 

注意してください。それぞれstorestoreListから、それぞれaddressstore.AssetAddressesの中で、addressが物理アドレスである場合は、addressを選択します。

今度はクエリの結果を繰り返し、必要に応じて変更してください。

また、私は強く列挙

public enum AddressType { Physical, Alternative, Mailing } 

と、このタイプ

public AddressType AddressType { get; } 

のものであるとし、次にあなたが

where address.AddressType == AddressType.Physical 

または

を書くことができ Address.AddressTypeを変更することをお勧め
.Where(address => address.AddressType == AddressType.Physical); 
+0

:-)あなたは速い。どうもありがとう。 – bobetko

2

SelectManyを使用してアドレスのリストを作成する必要があります。

var result = 
    storeList 
    .SelectMany(store => store.AssetAddress) 
    .Where(address => address.AddressType == "PHYSICAL") 
    .FirstOrDefault(); 

あなただけあなたが興味を持っている店のアドレスを取得するように、私はそこに推測していることもstoreListにwhereになります。

関連する問題