私はすべての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
文字 "_"に基づきます。
どこが悪いの?
あなたはあなたが欲しいアドレスを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>
更新したい場合AddressId
Linqクエリを使うと、次のようにすることができます。
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_ ));
あなたの選択操作.Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))
オブジェクトを変更するのではなく、各オブジェクトをサブストリングに投影します。このように.ToList()
を返しますList<string>
。
List<string>
にList<IAddress>
... - Patryk Ćwiek