2

私はすべてのIDのリストを持っています。

//コード

List<IAddress> AllIDs = new List<IAddress>();
AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
              .Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))
              .ToList();

上記のLINQクエリを使用していますが、コンパイルエラーが発生します。

//エラー

System.Collections.Generic.List型を暗黙的に変換することはできません   System.Collections.Generic.Listへのリンク

メンバフィールドの部分文字列操作をしたいAddressId文字 "_"に基づきます。

どこが悪いの?


  • を割り当てようとしていますList<string>List<IAddress>... - Patryk Ćwiek

3 답변


3

あなたはあなたが欲しいアドレスをwhereで見つけますが、それからあなたはidからいくつかの文字列を選択します。

s.AddressId.Substring(s.AddressId.IndexOf("_")) is string

すなわちSelect(s => s.AddressId.Substring(s.AddressId.IndexOf("_"))).ToList();部分文字列のリストを返す

それを削除して使用するだけです

AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_")).ToList()

として

Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_")) 

AllIDのリストをフィルタリングしますが、IAddress

あなたが書き直すことがこのようであるならば、あなたは問題が何であるか見ることができるはずです

あなたが言った

var items  = from addr in AllIds 
             where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
             select addr.AddressId.Substring(s.AddressId.IndexOf("_")); // select a string from the address

AllIDs = items.ToList(); // hence the error List<string> can't be assigned to List<IAddress>

しかし、あなたは欲しかった

var items  = from addr in AllIds 
             where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
             select addr;                        // select the address

AllIDs = items.ToList(); // items contains IAddress's so this returns a List<IAddress>


1

更新したい場合AddressIdLinqクエリを使うと、次のようにすることができます。

AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
      .ToList()
      .ForEach(s => s.AddressId = s.AddressId.Substring(s.AddressId.IndexOf("_")));

ご了承ください.ForEach()はLinqの拡張ではなく、クラスList<のメソッドです。 T>。

IndexOfは時間がかかる可能性があるので、値をキャッシュすることを考えてください。

AllIDs.Select(s => new { Address = s, IndexOf_ = s.AddressId.IndexOf("_") })
      .Where(s => s.Address.AddressId.Length >= s.IndexOf_ )
      .ToList()
      .ForEach(s => s.Address.AddressId = s.Address.AddressId.Substring(s.IndexOf_ ));


0

あなたの選択操作.Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))オブジェクトを変更するのではなく、各オブジェクトをサブストリングに投影します。このように.ToList()を返しますList<string>

関連する質問

最近の質問