リストがありますAllIDs
:
List<IAddress> AllIDs = new List<IAddress>();
私はやってみたいですsubstring
メンバーフィールドに対する操作AddressId
文字 "_"に基づきます。
以下のLINQクエリを使用していますが、コンパイルエラーが発生します。
AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
.Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))
.ToList();
エラー:
暗黙的に型 'System.Collections.Generic.List< string>'を 'System.Collections.Generic.List< MyCompany.Common.Users.IAddress>に変換することはできません
AllIDs
のリストですIAddress
しかし、あなたはstring
。コンパイラは変換できないと文句を言っていますList<string>
へList<IAddress>
。代わりに次のことを意味しましたか?
var substrings = AllIDs.Where(...).Select(...).ToList();
あなたがそれらを元に戻したい場合Address
オブジェクト(あなたがAddress
あなたに加えてクラスIAddress
()のようにすることができます。Address
あります):
AllIDs = AllIDs.Where(...).Select(new Address(s.AddressID.Substring(s.AddressID.IndexOf("_")))).ToList();
メソッド構文の代わりにLINQにクエリ構文を使用することも検討する必要があります。これにより、このような多くのクエリのクリーンアップと読みやすさが向上します。元の(変更されていない)クエリは、これとほぼ同じです。
var substrings = from a in AllIDs
let id = a.AddressId
let idx = id.IndexOf("_")
where id.Length >= idx
select id.Substring(idx);
これは実際には単なるスタイルのものですが、これは元のものと同じものにコンパイルされます。ちょっと違いがあるのは、電話をかけるだけでいいということです。String.IndexOf()
エントリごとに2回ではなく、エントリごとに1つ。let
あなたの友だちです。
たぶんこれ?
var boundable =
from s id in AllIDs
where s.AddressId.Length >= s.AddressId.IndexOf("_")
select new { AddressId = s.AddressId.Substring(s.AddressId.IndexOf("_")) };
boundable = boundable.ToList();